Class::LazyFactory - Base class factory for lazy-loaded concrete classes
# factory class package MyHello::Factory; use strict; use base qw/Class::LazyFactory/; __PACKAGE__->initialize_factory( namespace => 'MyHello::Impl', constructor => 'new', ); # the base class package MyHello::Impl::Abstract; use strict; use Carp; sub new { my $class = shift; return bless({ },$class); } sub get_greeting { croak "Unimplemented" } # concrete class #1 package MyHello::Impl::English; use strict; use base qw/MyHello::Impl::Abstract/; sub get_greeting { "hello world" } # main.pl my $greeting = MyHello::Factory->new( "English" ); print $greeting->get_greeting();
Class::LazyFactory is a base class for factory classes. Concrete classes are lazy loaded, i.e. dynamically require()d, and instances of the concrete classes are constructed.
require()
By using a factory method design pattern, one can provide a consistent interface for constructing a family of classes, without knowing the actual concrete classes in advance.
Class::LazyFactory should be used as the base class for your factory objects. For example:
package MyHello::Factory; use strict; use base qw/Class::LazyFactory/; __PACKAGE__->initialize_factory( namespace => 'MyHello::Impl', constructor => 'new', );
MyHello::Factory becomes your factory for constructing objects under the namespace of MyHello::Impl. Concrete classes need not be registered in advance in order to be instantiated. Concrete classes will only be loaded upon first construction.
This should be called in the factory class inheriting from Class::LazyFactory.
Parameters are as follows:
namespace => optional, use of a namespace is strongly recommended. This is the prefix used when resolving the fully-qualified namespace of the concrete class. constructor => optional, defaults to 'new'. This is the class method that is called when instantiating a concrete class.
Returns an instance of a concrete class. The fully-qualified class name of the concrete class is resolved by concatenating the namespace prefix (see initialize_factory) and $concrete_class_name.
initialize_factory
$concrete_class_name
@params is passed to the concrete class constructor.
@params
Factory Design Patterns - Abstract Factory, Factory Method
DBI, DBI::DBD - This module was heavily inspired by DBI; DBI reflects the factory design pattern and that drivers are dynamically loaded from the given DSN string.
Class::Factory
Dexter Tad-y, <dtady@cpan.org>
Copyright (C) 2009 by Dexter Tad-y
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.
To install Class::LazyFactory, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Class::LazyFactory
CPAN shell
perl -MCPAN -e shell install Class::LazyFactory
For more information on module installation, please visit the detailed CPAN module installation guide.