Mercurial > pub > Impl
diff Lib/IMPL/Object/Factory.pm @ 67:9f5795a10939
Documentation, minor fixes
author | wizard |
---|---|
date | Fri, 19 Mar 2010 20:06:12 +0300 |
parents | 259cd3df6e53 |
children | 2f31ecabe9ea |
line wrap: on
line diff
--- a/Lib/IMPL/Object/Factory.pm Thu Mar 18 17:58:33 2010 +0300 +++ b/Lib/IMPL/Object/Factory.pm Fri Mar 19 20:06:12 2010 +0300 @@ -70,14 +70,6 @@ =begin code -sub ProcessItems { - my ($factory,$items); - - return map $factory->new($_), @$items; -} - -my @users = ProcessItems('MyApp::User',$db->selectUsers); - my $factory = new IMPL::Object::Factory( 'MyApp::User', { @@ -85,13 +77,35 @@ } ); +my $class = 'MyApp::User'; + +my $user; + +$user = $class->new(name => 'nobody'); # will create object MyApp::User + # and pass parameters (name=>'nobody') + +$user = $factory->new(name => 'root'); # will create object MyApp::User + # and pass paremeters (isAdmin => 1, name => 'root') + =end code -my @admins = ProcessItems($factory,$db->selectAdmins); +Или сериализованная форма в XML. + +=begin code xml +<factory type="IMPL::Object::Factory"> + <factory>MyApp::User</factory>, + <parameters type="HASH"> + <isAdmin>1</isAdmin> + </parameters> +</factory> + +=end code xml =head1 DESCRIPTION +C<[Serializable]> + Класс, реализующий фабрику классов. Фабрика классов это любой объект, который имеет метод C< new > вызов которого приводит к созданию нового @@ -108,16 +122,56 @@ =over -=item C< factory > +=item C< CTOR($factory,$parameters) > + +Создает новый экземпляр + +=over + +=item C<$factory> + +Либо имя класса, либо другая фабрика. + +=item C<$parameters> + +Ссылка на параметры для создания объектов, может быть ссылкой на хеш, массив и т.д. + +Если является ссылкой на хеш, то при создании объектов данной фабрикой этот хеш +будет развернут в список и передан параметрами методу C<new>. + +Если является ссылкой на массив, то при создании объектов данной фабрикой этот массив +будет передан в списк и передан параметрами методу C<new>. + +Если является любым другим объектом или скаляром, то будет передан параметром методу +C<new> как есть. + +=back + +=item C< [get] factory > Свойство, содержащее фабрику для создание новых объектов текущей фабрикой. Чаще всего оно содержит имя класса. -=item C< parameters > +=item C< [get] parameters > Свойство, содержит ссылку на параметры для создания объектов, при создании объекта эти параметры будут развернуты в список и переданы оператору C< new > фабрике из свойства C< factory >, за ними будут -следовать параметры непосредственно текущей фабрики. +следовать параметры непосредственно текущей фабрики. + +=item C<new(@params)> + +Создает новый объект, используя свйство C<factory> как фабрику и передавая туда параметры +из свойства C<parameters> и списка C<@params>. Ниже приведен упрощенный пример, как это происходит. + +=begin code + +sub new { + my ($this,@params) = @_; + + return $this->factory->new(_as_list($this->parameters), @params); +} + +=end code =back