Шаблон «Фабричный метод» (Factory Method). В данном шаблоне вводится полиморфный класс Factory, в котором определяется интерфейс фабричного метода, подобного CreateWarrior( ), а ответственность за создание объектов конкретных классов переносится на производные от Factory классы, в которых этот метод переопределяется;
Шаблон «Абстрактная фабрика» (Abstract Factory). Использует несколько фабричных методов и предназначен для создания целого семейства или группы взаимосвязанных объектов. Для приведённого выше примера, шаблон может предоставлять методы для создания всех типов воинов;
Шаблон «Строитель» (Builder). Определяет процесс поэтапного конструирования сложного объекта, в результате которого могут получаться разные представления этого объекта;
Шаблон «Прототип» (Prototype). Создаёт новые объекты с помощью прототипов (создавая копии самого себя);
Шаблон «Синглетон» (Singleton). Позволяет создавать только один экземпляр класса.
Шаблон «Фабричный метод»
В системе часто требуется создавать объекты самых разных типов. Шаблон «Фабричный метод» (Factory Method) может быть полезным в решении следующих задач:
Система должна оставаться расширяемой путем добавления объектов новых типов. Непосредственное использование выражения «new» является нежелательным, так как в этом случае код создания объектов с указанием конкретных типов может получиться разбросанным по всему приложению. Тогда такие операции как добавление в систему объектов новых типов или замена объектов одного типа на другой будут затруднительными. Шаблон «Фабричный метод» позволяет системе оставаться независимой как от самого процесса порождения объектов, так и от их типов;
Заранее известно, когда нужно создавать объект, но неизвестен его тип.
Для того, чтобы система оставалась независимой от различных типов объектов, Шаблон «Фабричный метод» использует механизм полиморфизма - классы всех конечных типов наследуются от одного абстрактного базового класса, предназначенного для полиморфного использования. В этом базовом классе определяется единый интерфейс, через который пользователь будет оперировать объектами конечных типов.
Для обеспечения относительно простого добавления в систему новых типов Шаблон «Фабричный метод» локализует создание объектов конкретных типов в специальном классе-фабрике. Методы этого класса, посредством которых создаются объекты конкретных классов, называются фабричными. Существуют две разновидности Шаблон «Фабричный метод»: