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