Це креативний шаблон дизайну що говорить про створення об’єкта. Фабричний шаблон проектування говорить про те, щоб визначити інтерфейс (інтерфейс Java або абстрактний клас) для створення об’єкта та дозволити підкласам вирішити, який клас створити.
Важливі теми для шаблону проектування методу Factory у Java
- Що таке шаблон проектування методу фабрики в Java?
- Коли використовувати шаблон проектування фабричного методу в Java?
- Ключові компоненти шаблону проектування фабричного методу
- Приклад шаблону проектування фабричного методу в Java
- Випадки використання шаблону проектування методу Factory у Java
- Переваги шаблону проектування Factory Method у Java
- Недоліки шаблону проектування фабричного методу в Java
Що таке шаблон проектування методу фабрики в Java?
Шаблон проектування методу фабрики визначає інтерфейс для створення об’єкта, але дозволяє підкласу вирішувати, який клас створити екземпляр. Фабричний метод дозволяє класу відкласти створення екземпляра до підкласу.
Нижче наведено пояснення зображення вище:
- Фабричний метод в інтерфейсі дозволяє класу відкласти створення екземпляра до одного або кількох конкретних підкласів.
- Оскільки ці шаблони проектування говорять про екземпляр об’єкта, вони належать до категорії творчих шаблонів проектування.
- Якщо помітити назву Заводський метод , це означає, що існує метод, який є фабрикою, і загалом, фабрики пов’язані з творчим матеріалом, і тут створюється об’єкт.
- Це один із найкращих способів створити об’єкт, де логіка створення об’єкта прихована від клієнта. Тепер розглянемо реалізацію.
Коли використовувати шаблон проектування фабричного методу в Java?
Шаблон проектування фабричного методу можна використовувати в java в таких випадках:
заміна рядка javascript
- Клас не може передбачити тип об’єктів, які йому необхідно створити.
- Клас хоче, щоб його підкласи визначали об’єкти, які він створює.
- Класи делегують відповідальність одному з кількох допоміжних підкласів, і ви прагнете зберегти інформацію про те, який допоміжний підклас є делегатом, у певній області чи розташуванні.
Ключові компоненти шаблону проектування фабричного методу
Продукт
- Це абстрактний клас або інтерфейс, який визначає загальні операції для об’єктів, створених фабрикою.
- Конкретні продукти — це фактичні класи, які реалізують інтерфейс продукту, кожен з яких представляє певний тип об’єкта, який потрібно створити.
Творець
- Це абстрактний клас або інтерфейс, який оголошує фабричний метод.
- Цей метод відповідає за створення об’єктів Product, але фактичне створення він делегує підкласам.
Творці бетону
- Це підкласи Creator, які реалізують фабричний метод.
- Вони вирішують, який конкретний бетонний продукт створити, часто на основі вхідних параметрів або конфігурації.
Заводський метод
- Це метод, визначений у класі Creator, який відповідає за створення об’єктів Product.
- Зазвичай він оголошується як абстрактний у Creator і реалізується в Concrete Creators.
Приклад шаблону проектування фабричного методу в Java
Постановка проблеми
Ви розробляєте програмну систему для платформи електронної комерції, яка працює з різними типами продуктів. Кожна категорія продуктів (наприклад, електроніка, одяг, книги) потребує спеціального поводження під час створення. Однак ви хочете відокремити клієнтський код від конкретної логіки створення продукту, щоб підвищити гнучкість і зручність обслуговування. Крім того, ви хочете забезпечити легке розширення шляхом додавання нових типів продуктів у майбутньому без зміни існуючого коду.
Рішення з використанням абстрактного класу
Зазначену вище проблему можна вирішити за допомогою шаблону проектування методу заводу:
Java
альфа-бета обрізка
// Abstract Product Class> abstract> class> Product {> > public> abstract> void> display();> }> // Concrete Products> class> ConcreteProductA> extends> Product {> > @Override> > public> void> display() {> > System.out.println(> 'This is Concrete Product A.'> );> > }> }> class> ConcreteProductB> extends> Product {> > @Override> > public> void> display() {> > System.out.println(> 'This is Concrete Product B.'> );> > }> }> // Creator Abstract Class> abstract> class> Creator {> > public> abstract> Product factoryMethod();> }> // Concrete Creators> class> ConcreteCreatorA> extends> Creator {> > @Override> > public> Product factoryMethod() {> > return> new> ConcreteProductA();> > }> }> class> ConcreteCreatorB> extends> Creator {> > @Override> > public> Product factoryMethod() {> > return> new> ConcreteProductB();> > }> }> // Client Code> public> class> FactoryMethodExample {> > public> static> void> main(String[] args) {> > Creator creatorA => new> ConcreteCreatorA();> > Product productA = creatorA.factoryMethod();> > productA.display();> > Creator creatorB => new> ConcreteCreatorB();> > Product productB = creatorB.factoryMethod();> > productB.display();> > }> }> |
>
>Вихід
This is Concrete Product A. This is Concrete Product B.>
Рішення за допомогою інтерфейсу
Зазначену вище проблему можна вирішити за допомогою шаблону проектування методу заводу:
Java
// Product Interface> interface> Product {> > void> display();> }> // Concrete Products> class> ConcreteProductA> implements> Product {> > @Override> > public> void> display() {> > System.out.println(> 'This is Concrete Product A.'> );> > }> }> class> ConcreteProductB> implements> Product {> > @Override> > public> void> display() {> > System.out.println(> 'This is Concrete Product B.'> );> > }> }> // Factory Interface> interface> Factory {> > Product factoryMethod();> }> // Concrete Factories> class> ConcreteFactoryA> implements> Factory {> > @Override> > public> Product factoryMethod() {> > return> new> ConcreteProductA();> > }> }> class> ConcreteFactoryB> implements> Factory {> > @Override> > public> Product factoryMethod() {> > return> new> ConcreteProductB();> > }> }> // Client Code> public> class> FactoryMethodExample {> > public> static> void> main(String[] args) {> > Factory factoryA => new> ConcreteFactoryA();> > Product productA = factoryA.factoryMethod();> > productA.display();> > Factory factoryB => new> ConcreteFactoryB();> > Product productB = factoryB.factoryMethod();> > productB.display();> > }> }> |
>
>Вихід
This is Concrete Product A. This is Concrete Product B.>
Випадки використання шаблону проектування методу Factory у Java
Ось кілька поширених застосувань шаблону Factory Method Design у Java:
- Креативні рамки:
- JDBC (Java Database Connectivity) широко використовує фабрики для створення з’єднань, операторів і наборів результатів. Фреймворки впровадження залежностей, такі як Spring і Guice, значною мірою покладаються на фабрики для створення компонентів і керування ними.
- Набори інструментів GUI:
- Swing і JavaFX використовують фабрики для створення компонентів інтерфейсу користувача, таких як кнопки, текстові поля та мітки, що забезпечує налаштування та гнучкість дизайну інтерфейсу користувача.
- Рамки журналювання:
- Такі фреймворки журналювання, як Log4j і Logback, використовують фабрики для створення логгерів із різними конфігураціями, що дозволяє контролювати рівні журналювання та призначення виводу.
- Серіалізація та десеріалізація:
- Фреймворки серіалізації об’єктів часто використовують фабрики для створення об’єктів із серіалізованих даних, підтримуючи різні формати серіалізації та версії.
- Системи плагінів:
- Системи на основі плагінів часто використовують фабрики для динамічного завантаження та створення екземплярів плагінів, що дозволяє розширювати та налаштовувати.
- Розробка гри:
- Ігрові движки часто використовують фабрики для створення різних типів ігрових об’єктів, персонажів і рівнів, сприяючи організації та гнучкості коду.
- Веб-розробка:
- Веб-фреймворки іноді використовують фабрики для створення компонентів перегляду, контролерів і служб, що забезпечує модульність і можливість тестування веб-додатків.
Переваги шаблону проектування Factory Method у Java
Переваги Factory Method Design Pattern у Java:
- Роз'єднання: Він відокремлює логіку створення об’єктів від клієнтського коду, який використовує ці об’єкти. Це робить код більш гнучким і придатним для обслуговування, оскільки зміни в процесі створення не вимагають змін коду клієнта.
- Розширюваність: Легко представити нові типи продуктів, не змінюючи код клієнта. Вам просто потрібно створити новий підклас Concrete Creator і реалізувати заводський метод для створення нового продукту.
- Тестування: Це спрощує модульне тестування, дозволяючи імітувати або заглушати створення продукту під час тестування. Ви можете тестувати різні реалізації продукту окремо, не покладаючись на фактичне створення об’єкта.
- Повторне використання коду: Фабричний метод можна повторно використовувати в різних частинах програми, де потрібно створити об’єкт. Це сприяє централізації та повторному використанню логіки створення об’єктів.
- Інкапсуляція: Він приховує конкретні класи продуктів від коду клієнта, роблячи код менш залежним від конкретних реалізацій. Це покращує ремонтопридатність і зменшує зчеплення.
Недоліки шаблону проектування фабричного методу в Java
Недоліки Factory Method Design Pattern в Java:
кіноактор віджай
- Підвищена складність: Він представляє додаткові класи та інтерфейси, додаючи рівень абстракції, який може зробити код більш складним для розуміння та підтримки, особливо для тих, хто не знайомий із шаблоном.
- Накладні витрати: Використання поліморфізму та динамічного зв’язування може незначно вплинути на продуктивність, хоча це часто незначно в більшості програм.
- Тісний зв’язок в ієрархії продуктів: Творці бетону все ще тісно пов’язані зі своїми відповідними продуктами Concrete. Зміни в одному часто вимагають змін в іншому.
- Залежність від конкретних підкласів: Клієнтський код все ще залежить від абстрактного класу Creator, вимагаючи знання його конкретних підкласів для правильного виклику фабричних методів.
- Можливість надмірного використання: Важливо розумно використовувати шаблон Factory Method, щоб уникнути надмірної розробки програми. Створення простого об’єкта часто можна виконати безпосередньо без необхідності використання фабрики.
- Проблеми тестування: Тестування самої заводської логіки може бути складнішим.
Висновок
Поки що ми дізналися, що таке шаблон проектування методу Factory і як його реалізувати. Я вважаю, що тепер ми маємо справедливе розуміння переваг цього механізму розробки. Фабричні методи пронизують набори інструментів і фреймворки. Попередній приклад документа є типовим використанням у MacApp і ET++.
Читати далі : Підручник із шаблонів проектування Java