Mercurial > pub > Impl
comparison lib/IMPL/Object/InlineFactory.pm @ 407:c6e90e02dd17 ref20150831
renamed Lib->lib
| author | cin |
|---|---|
| date | Fri, 04 Sep 2015 19:40:23 +0300 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 406:f23fcb19d3c1 | 407:c6e90e02dd17 |
|---|---|
| 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 |
