В чем преимущество фабричного образца?

Возможный дубликат:
Каковы практические применения Factory Method Pattern?
Различия между абстрактным фабричным шаблоном и фабричным методом

Мое текущее понимание фабрики состоит в том, что она может создавать объект с помощью входной строки, скажем,

Factory.create("mouse");
Factory.create("hamster");

В чем преимущество этого паттерна перед новым?

4 ответа

Паттерн Factory полезен, когда у вас есть группы объектов, и следует создавать только объекты из определенной группы. Что-то вроде:

abstract UI factory:
   create_window()
   create_button()
   ...

Windows UI factory:
   create_window()
   create_button()
   ...

...

В этом случае вместо тонн ifС вашим кодом вы можете один раз создать экземпляр Factory и использовать его.

Фабрика полезна, если вы хотите "гармонизировать" создание различных объектов (в вашем примере Mouse и Hamster) через общую Фабрику. Это может быть использовано для (а) абстрагирования определенных деталей Конструктора для каждого подкласса общего суперкласса (например, Animal в вашем примере) или (b) предоставления аргументов по умолчанию Конструктору в зависимости от того, какой тип объекта (или животного) является быть созданным.

Его можно использовать для унификации создания объектов, имеющих общую общность, например, в кэшировании: CacheFactory -> Memcache, Filecache, ... Работа с каждым кэшем аналогична, но настройка различных стратегий кэширования может значительно отличаться. При использовании метода фабрики вы можете более легко переключаться между различными стратегиями кэширования, в лучшем случае просто изменяя одну строку фабрики кода ("Memcache", опции), не беспокоясь о тонкостях конкретной серверной части;

Лучше создавать фабрику, когда вам нужно создать сложные продукты (т.е. "инкапсулировать" сложный процесс создания продукта), иметь единую точку контроля для нескольких продуктов или если необходимо управлять временем жизни и / или ресурсами, из которых эти продукты потребляют единая точка отсчета. В некоторых случаях слишком сложно переписать экземпляр продукта и обработать код с "новым", поэтому фабричный метод обеспечивает повторное использование и однородность при минимизации потенциальных ошибок кодирования.

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

Вы можете уменьшить зависимость (если это имеет значение в вашем языке).

То есть вы можете изолировать своих клиентов от ударов тяжелых #includes, время компиляции и зависимости.

Другие вопросы по тегам