В чем преимущество фабричного образца?
Возможный дубликат:
Каковы практические применения 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
, время компиляции и зависимости.