Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Изучаю паттер - Factory method. Правильно ли я понял этот шаблон?
Покинул форум
Сообщений всего: 68
Дата рег-ции: Дек. 2013
Помог: 0 раз(а)
Доброго времени суток.
Factory method - я понял, как класс, метод у которого, создаёт объект определённого типа. При этом способ создания объекта у него может быть совершенно разный, например:
Через ифы:
Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014
Помог: 10 раз(а)
[+]
Viper, только вот то, что вы написали - называется Синглтон, что есть совершенно иной патерн. (Добавление)
Цитата:
Кстати, как называется такое явление, когда по значению переменной создают объект класса?
В разных местах встречал это под названием Simple factory.
Ибо классический паттер абтрактной фабрики не подразумевает в коде фабрики какого-то ветвления.
Абстрактная фабрикая сделана для того, что бы в процессе рефакторинга кода легко поменять объект А на объект Б, не меняя всякие new во всех местах кода. Просто меняется в одном классе-фабрике.
Покинул форум
Сообщений всего: 68
Дата рег-ции: Дек. 2013
Помог: 0 раз(а)
MiksIr пишет:
Viper, только вот то, что вы написали - называется Синглтон, что есть совершенно иной патерн. (Добавление)
Цитата:
Кстати, как называется такое явление, когда по значению переменной создают объект класса?
В разных местах встречал это под названием Simple factory.
Ибо классический паттер абтрактной фабрики не подразумевает в коде фабрики какого-то ветвления.
Абстрактная фабрикая сделана для того, что бы в процессе рефакторинга кода легко поменять объект А на объект Б, не меняя всякие new во всех местах кода. Просто меняется в одном классе-фабрике.
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
caballero пишет:
фабричные методы создают экземпляры класса, членами которого являются, а не шо попало.
ну и тут следовательно предположить, что весь цимес данного действа в возможности расширенной инициализации класса в один клик, то есть метод, хотя всю ту инициализацию можно перевести и в конструктор, с другой стороны конструктор должен быть более универсальным чем какой-то фабричный метод
иначе профита никакого в отличии от профита фабрики, которая может создать много чего реализующее интерфейс
и исходя из такой логики
можно ли назвать методы различных моделей ORM а-ля Model::find, Model::findByPk, Model::findOne фабричными методами, хотя эти методы зачастую будут принимать дополнительные параметры чтобы создать объект именно с теми характеристиками, которые нужны?
----- Just do it
MiksIr
Отправлено: 27 Июля, 2015 - 00:45:41
Забанен
Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014
Помог: 10 раз(а)
[+]
caballero пишет:
фабричные методы создают экземпляры класса, членами которого являются, а не шо попало.
Нет. (Добавление)
Viper пишет:
ороче в разных источниках по разному написано. Хрен знает кому верить... Пойду Попова почитаю...
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
ну и тут следовательно предположить, что весь цимес данного действа в возможности расширенной инициализации класса в один клик, то есть метод, хотя всю ту инициализацию можно перевести и в конструктор, с другой стороны конструктор должен быть более универсальным чем какой-то фабричный метод
ни фига не понял
Цитата:
иначе профита никакого в отличии от профита фабрики
профитов как минимум два:
- метод проще чем отдельный класс фабрики
- фабричный метод имеет доступ к приватным членам класса (Добавление)
Цитата:
Нет.
Да
только индусы лепят отдельную фабрику с одним методом там где можно обойтись статическим методом класса создаваемого экземпляра
Цитата:
Начните с банды четырех
начните с ПРАКТИЧЕСКОГО програмирования и не вумных книжек с теорией
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.