понимание шаблона фабричного метода - PullRequest
2 голосов
/ 17 февраля 2012

Я читаю шаблон фабричного метода, поскольку у меня есть некоторые проблемы, связанные с ним, но я не могу понять его из ядра. Согласно определению, указанному здесь

Создание объекта часто требует сложных процессов, не целесообразно включить в составляющий объект. Объект создание может привести к значительному дублированию кода, может потребовать информация, не доступная для составляющего объекта, может не обеспечивать достаточный уровень абстракции, или в противном случае не может быть частью составление проблем объекта.

Я могу понять концепцию дублирования значимого кода, но я не могу понять другие концепции, как это говорится

Может потребоваться информация, недоступная для составляющего объекта

Как класс может содержать информацию, которая не доступна при составлении объекта. Насколько я понимаю, это может быть любой private дата-класс этого класса. Но если что-то и есть private, то как процесс создания объекта нуждается в этой информации? Аналогично другие две точки

Он может не обеспечивать достаточный уровень абстракции или иным образом не может быть частью проблем составного объекта.

Может ли кто-нибудь здесь описать это точно и показать некоторые мои фрагменты кода, чтобы я мог понять концепцию

Ответы [ 3 ]

1 голос
/ 17 февраля 2012

когда речь идет об использовании внешнего ресурса в нашем объекте, на ум приходят альтернативы:

  1. Чтобы создать объект с помощью его конструктора
  2. Чтобы попросить другой объектсоздайте его для нашего объекта (шаблон метода фабрики и фабрики). Таким образом, наш объект не знает, как создать внешний ресурс, но он должен знать, к кому обратиться за ним (ему нужно хранить ссылку на фабрику или он знаеттип фабрики в случае вызова статического метода фабрики)
  3. Чтобы внедрить внешний ресурс, используя контейнер IoC (инверсия управления). Таким образом, наш объект не знает ничего ни о том, как создатьвнешний ресурс, ни кто не несет ответственности за его создание. Фактически этот метод делает фабричные шаблоны устаревшими.
1 голос
/ 22 февраля 2012

Представьте, что вы пишете API, с помощью которого пользователи могут создавать и использовать определенный объект.Внутренне, в рамках API, вы хотите зарегистрировать свой объект в некоторых службах, слушателях, базе данных ...

Здесь у вас есть два различных способа решения ситуации:

  • Вы либо позволяете пользователю создать объект и берете на себя ответственность за его регистрацию в службах, слушателях и базе данных, которые должны быть доступны (общедоступно).

ИЛИ

  • ВыВы хотите предоставить общедоступный фабричный класс, который будет создавать объект с заданными параметрами и позаботится о выполнении всей необходимой инициализации.

Второй сценарий - лучший способ скрыть всю сложность создания таких объектов в вашей системе.Это также имеет большое преимущество, заключающееся в сокрытии служб, слушателей и баз данных, необходимых для регистрации созданного объекта.

1 голос
/ 17 февраля 2012

Идея фабричного шаблона заключается в создании классов нагрузки и динамическом создании новых объектов.Довольно часто это делается как статический класс (такой как здесь , в официальной документации PHP), но некоторые фреймворки используют шаблон фабрики как способ загрузки объектов в объекты MVC, например, когда вы хотите загрузитьнекоторые данные просматриваются через модель.

Идея фабричного шаблона - эффективность и управление ресурсами.Он загружает файл, только когда он еще не загружен, и возвращает вновь созданный объект.

(Обратите внимание, что пример в документации PHP не идеален, было бы лучше проверить, был ли определен класс, и еслинет, затем попытайтесь включить файл вместо использования include_once ())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...