| 407 | 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 |