- Чем эти три модели отличаются друг от друга?
Фабрика: создает объекты, не раскрывая логику реализации клиенту.
Фабричный метод: Определите интерфейс для создания объекта, но пусть подклассы решают, какой класс создать. Метод Factory позволяет классу откладывать создание экземпляров для подклассов
Абстрактная фабрика: предоставляет интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов.
Шаблон AbstractFactory использует композицию, чтобы делегировать ответственность за создание объекта другому классу, в то время как шаблон проектирования метода Factory использует наследование и опирается на производный класс или подкласс для создания объекта.
- Когда использовать что?
Фабрика: Клиенту просто нужен класс, и ему все равно, какую конкретную реализацию он получает.
Фабричный метод: Клиент не знает, какие конкретные классы ему потребуется создать во время выполнения, но просто хочет получить класс, который будет выполнять эту работу.
AbstactFactory: когда вашей системе необходимо создать несколько семейств продуктов или вы хотите предоставить библиотеку продуктов без раскрытия деталей реализации.
Абстрактные фабричные классы часто реализуются с помощью фабричного метода. Заводские методы обычно вызываются в шаблонных методах.
- А также, если возможно, какие-либо примеры Java, связанные с этими шаблонами?
Фабрика и ФабрикаМетод
Намерение:
Определите интерфейс для создания объекта, но пусть подклассы решают, какой класс создать. Фабричный метод позволяет классу отложить создание экземпляров для подклассов.
Диаграмма UML :
Product: определяет интерфейс объектов, создаваемых методом Factory.
ConcreteProduct: реализует интерфейс продукта
Создатель: объявляет фабричный метод
ConcreateCreator: реализует метод Factory для возврата экземпляра ConcreteProduct.
Постановка задачи: Создайте Фабрику Игр, используя Фабричные Методы, которые определяют интерфейс игры.
Фрагмент кода:
Фабричный образец. Когда использовать фабричные методы?
Сравнение с другими шаблонами творчества:
Проектирование начинается с использования Factory Method (менее сложный, более настраиваемый, подклассы распространяются) и развивается в сторону Abstract Factory, Prototype или Builder (более гибкий, более сложный), когда дизайнер обнаруживает, где требуется большая гибкость
Абстрактные фабричные классы часто реализуются с помощью фабричных методов , но они также могут быть реализованы с использованием прототипа
Ссылки для дальнейшего чтения: Sourcemaking design-pattern