comparison Lib/IMPL/Object/InlineFactory.pm @ 284:f2a6bc5f3184

+IMPL::Object::InlineFactory: implement object factory as subroutine
author sergey
date Thu, 14 Feb 2013 19:14:02 +0400
parents
children
comparison
equal deleted inserted replaced
283:2f06250bab5f 284:f2a6bc5f3184
1 package IMPL::Object::InlineFactory;
2 use strict;
3 use Carp qw(croak);
4
5 sub new {
6 my $self = shift;
7 if(ref $self) {
8 return &$$self(@_);
9 } else {
10 my $factory = shift;
11
12 croak "A code reference is required"
13 unless ref $factory eq 'CODE';
14
15 return bless \$factory, $self;
16 }
17 }
18
19 1;
20
21 __END__
22
23 =pod
24
25 =head1 NAME
26
27 C<IMPL::Object::InlineFactory> - реализация фабрики на основе процедуры.
28
29 =head1 SYNOPSIS
30
31 =begin code
32
33 use IMPL::require {
34 InlineFactory => 'IMPL::Object::InlineFactory',
35 Foo => 'My::App::Foo'
36 };
37
38 my $factory = InlineFactory->new(sub { Foo->new(mode => 'direct', @_) });
39
40 my $obj = $factory->new(timeout => 10); # Foo->new(mode => 'direct', timeout => 10);
41
42 =end code
43
44 =cut