- Чим ці три візерунки відрізняються один від одного?
Фабрика: створює об'єкти, не піддаючи клієнту логіку інстанції.
Заводський метод: визначте інтерфейс для створення об’єкта, але нехай підкласи вирішують, який клас інстанціювати. Фабричний метод дозволяє відкладати екземпляри класу для підкласів
Анотація заводу: надає інтерфейс для створення сімей пов’язаних або залежних об'єктів, не вказуючи їх конкретні класи.
Шаблон AbstractFactory використовує композицію для делегування відповідальності за створення об'єкта іншому класу, тоді як шаблон дизайну методу Фабрики використовує успадкування та для створення об'єкта покладається на похідний клас або підклас
- Коли використовувати який?
Фабрика: Клієнту просто потрібен клас і не байдуже, яку конкретну реалізацію він отримує.
Фабричний метод: Клієнт не знає, які конкретні класи потрібно буде створити під час виконання, але просто хоче отримати клас, який зробить цю роботу.
AbstactFactory: Коли вашій системі потрібно створити декілька сімейств продуктів або ви хочете надати бібліотеку продуктів, не піддаючи деталей реалізації.
Абстрактні фабричні класи часто реалізуються за допомогою Фабричного методу. Заводські методи зазвичай викликаються у методах шаблонів.
- А також, якщо можливо, будь-які приклади java, пов'язані з цими зразками?
Фабрика та FactoryMethod
Намір:
Визначте інтерфейс для створення об'єкта, але нехай підкласи вирішують, який клас інстанціювати. Заводський метод дозволяє класу відкладати екземпляр для підкласів.
Діаграма UML :
Продукт: Він визначає інтерфейс об'єктів, створених заводським методом.
ConcreteProduct: реалізує інтерфейс продукту
Творець: оголошує заводський метод
ConcreateCreator: реалізує заводський метод для повернення екземпляра ConcreteProduct
Постановка проблеми: Створіть Фабрику ігор за допомогою заводських методів, яка визначає ігровий інтерфейс.
Фрагмент коду:
Фабричний візерунок. Коли використовувати заводські методи?
Порівняння з іншими шаблонами оголошень:
Розробка дизайну починається з заводського методу (менш складний, більш настроюваний, підкласи розповсюджуються) та розвивається у напрямку абстрактного заводу, прототипу чи конструктора (більш гнучкий, складніший), оскільки дизайнер виявляє, де потрібна більша гнучкість
Абстрактні фабричні класи часто реалізовуються за допомогою заводських методів , але вони також можуть бути реалізовані за допомогою прототипу
Посилання для подальшого читання: Шаблони дизайну джерел