Mercurial > pub > Impl
comparison 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 |
comparison
equal
deleted
inserted
replaced
66:f47f93534005 | 67:9f5795a10939 |
---|---|
68 | 68 |
69 =head1 SYNOPSIS | 69 =head1 SYNOPSIS |
70 | 70 |
71 =begin code | 71 =begin code |
72 | 72 |
73 sub ProcessItems { | |
74 my ($factory,$items); | |
75 | |
76 return map $factory->new($_), @$items; | |
77 } | |
78 | |
79 my @users = ProcessItems('MyApp::User',$db->selectUsers); | |
80 | |
81 my $factory = new IMPL::Object::Factory( | 73 my $factory = new IMPL::Object::Factory( |
82 'MyApp::User', | 74 'MyApp::User', |
83 { | 75 { |
84 isAdmin => 1 | 76 isAdmin => 1 |
85 } | 77 } |
86 ); | 78 ); |
87 | 79 |
80 my $class = 'MyApp::User'; | |
81 | |
82 my $user; | |
83 | |
84 $user = $class->new(name => 'nobody'); # will create object MyApp::User | |
85 # and pass parameters (name=>'nobody') | |
86 | |
87 $user = $factory->new(name => 'root'); # will create object MyApp::User | |
88 # and pass paremeters (isAdmin => 1, name => 'root') | |
89 | |
88 =end code | 90 =end code |
89 | 91 |
90 my @admins = ProcessItems($factory,$db->selectAdmins); | 92 Или сериализованная форма в XML. |
91 | 93 |
94 =begin code xml | |
95 | |
96 <factory type="IMPL::Object::Factory"> | |
97 <factory>MyApp::User</factory>, | |
98 <parameters type="HASH"> | |
99 <isAdmin>1</isAdmin> | |
100 </parameters> | |
101 </factory> | |
102 | |
103 =end code xml | |
92 | 104 |
93 =head1 DESCRIPTION | 105 =head1 DESCRIPTION |
106 | |
107 C<[Serializable]> | |
94 | 108 |
95 Класс, реализующий фабрику классов. | 109 Класс, реализующий фабрику классов. |
96 | 110 |
97 Фабрика классов это любой объект, который имеет метод C< new > вызов которого приводит к созданию нового | 111 Фабрика классов это любой объект, который имеет метод C< new > вызов которого приводит к созданию нового |
98 объекта. Например каждый класс сам явялется фабрикой, поскольку, если у него вызвать метод | 112 объекта. Например каждый класс сам явялется фабрикой, поскольку, если у него вызвать метод |
106 | 120 |
107 =head1 MEMBERS | 121 =head1 MEMBERS |
108 | 122 |
109 =over | 123 =over |
110 | 124 |
111 =item C< factory > | 125 =item C< CTOR($factory,$parameters) > |
126 | |
127 Создает новый экземпляр | |
128 | |
129 =over | |
130 | |
131 =item C<$factory> | |
132 | |
133 Либо имя класса, либо другая фабрика. | |
134 | |
135 =item C<$parameters> | |
136 | |
137 Ссылка на параметры для создания объектов, может быть ссылкой на хеш, массив и т.д. | |
138 | |
139 Если является ссылкой на хеш, то при создании объектов данной фабрикой этот хеш | |
140 будет развернут в список и передан параметрами методу C<new>. | |
141 | |
142 Если является ссылкой на массив, то при создании объектов данной фабрикой этот массив | |
143 будет передан в списк и передан параметрами методу C<new>. | |
144 | |
145 Если является любым другим объектом или скаляром, то будет передан параметром методу | |
146 C<new> как есть. | |
147 | |
148 =back | |
149 | |
150 =item C< [get] factory > | |
112 | 151 |
113 Свойство, содержащее фабрику для создание новых объектов текущей фабрикой. Чаще всего оно содержит | 152 Свойство, содержащее фабрику для создание новых объектов текущей фабрикой. Чаще всего оно содержит |
114 имя класса. | 153 имя класса. |
115 | 154 |
116 =item C< parameters > | 155 =item C< [get] parameters > |
117 | 156 |
118 Свойство, содержит ссылку на параметры для создания объектов, при создании объекта эти параметры будут | 157 Свойство, содержит ссылку на параметры для создания объектов, при создании объекта эти параметры будут |
119 развернуты в список и переданы оператору C< new > фабрике из свойства C< factory >, за ними будут | 158 развернуты в список и переданы оператору C< new > фабрике из свойства C< factory >, за ними будут |
120 следовать параметры непосредственно текущей фабрики. | 159 следовать параметры непосредственно текущей фабрики. |
160 | |
161 =item C<new(@params)> | |
162 | |
163 Создает новый объект, используя свйство C<factory> как фабрику и передавая туда параметры | |
164 из свойства C<parameters> и списка C<@params>. Ниже приведен упрощенный пример, как это происходит. | |
165 | |
166 =begin code | |
167 | |
168 sub new { | |
169 my ($this,@params) = @_; | |
170 | |
171 return $this->factory->new(_as_list($this->parameters), @params); | |
172 } | |
173 | |
174 =end code | |
121 | 175 |
122 =back | 176 =back |
123 | 177 |
124 =cut | 178 =cut |