view lib/IMPL/Object/InlineFactory.pm @ 418:3f38dabaf5cc ref20150831

sync
author cin
date Mon, 28 Dec 2015 15:11:35 +0300
parents c6e90e02dd17
children
line wrap: on
line source

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