diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Lib/IMPL/Object/InlineFactory.pm	Thu Feb 14 19:14:02 2013 +0400
@@ -0,0 +1,44 @@
+package IMPL::Object::InlineFactory;
+use strict;
+use Carp qw(croak);
+
+sub new {
+	my $self = shift;
+	if(ref $self) {
+		return &$$self(@_);
+	} else {
+		my $factory = shift;
+		
+		croak "A code reference is required"
+		  unless ref $factory eq 'CODE';
+		
+		return bless \$factory, $self;
+	}
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+C<IMPL::Object::InlineFactory> - реализация фабрики на основе процедуры.
+
+=head1 SYNOPSIS
+
+=begin code
+
+use IMPL::require {
+	InlineFactory => 'IMPL::Object::InlineFactory',
+	Foo => 'My::App::Foo'
+};
+
+my $factory = InlineFactory->new(sub { Foo->new(mode => 'direct', @_) });
+
+my $obj = $factory->new(timeout => 10); # Foo->new(mode => 'direct', timeout => 10);
+
+=end code
+
+=cut
\ No newline at end of file