Паттерн Строитель
Паттерн Строитель — это порождающий паттерн проектирования, который позволяет отделить шаги создания сложного объекта от его представления.
Паттерн Строитель — это порождающий паттерн проектирования, основная цель которого — отделить процесс конструирования сложного объекта от его представления, чтобы можно было создавать объекты с разными представлениями.
summary
назначение
Отделить сложный процесс конструирования от его представления, чтобы один и тот же процесс конструирования мог создавать разные представления.
В основном решает
В программных системах создание сложного объекта обычно состоит из нескольких частей; комбинации этих частей часто меняются, но алгоритм комбинирования относительно стабилен.
Когда использовать
Когда некоторые базовые компоненты остаются неизменными, но их комбинации часто меняются.
Как решить
Разделите изменяющиеся и неизменные части.
Ключевой код
- СтроительСоздаёт и предоставляет экземпляр.
- директор: Управляет зависимостями созданных экземпляров и контролирует процесс конструирования.
Пример приложения
- В KFC гамбургеры, кола, картофель фри, жареные куриные крылышки и т. д. остаются неизменными, но их комбинации часто меняются, создавая разные «комбо».
- На Java
StringBuilder。
Преимущества
- Отделение процесса конструирования от представления делает процесс конструирования более гибким и позволяет строить разные представления.
- Это позволяет лучше контролировать процесс конструирования и скрывать конкретные детали конструирования.
- Высокая переиспользуемость кода; один и тот же строитель можно повторно использовать в разных процессах конструирования.
Недостатки
- Если у продукта мало атрибутов, паттерн «Строитель» может привести к избыточности кода.
- Увеличивает количество классов и объектов в системе.
Сценарий использования
- Создаваемый объект имеет сложную внутреннюю структуру.
- Sanajaujut pijjutiup iluani nalunaikkutaat ataqatigiittut.
Примечания
Factory pattern-mit assigiinngisitaq builder pattern ilaangit katitiriniq maligaa tunngavigivaa.
Структура
Builder pattern makkununga pingaarnit angat ilauqaqtuq:
Product: Sanajaujuq complex object. Product class ammalu ilauqaqtuq ilaangit nalunaikkutaallu.
Abstract Builder: Nalunaittuq abstract interface product sanajaq, ilauqaqtuq methods product-ip ilaangit sanajaq.
Concrete Builder: Implement-vaa abstract builder interface, nalunaittuq qanuq sanajaqqaaq product-ip ilaangit, ammalu returning final built product.
Director: Responsible calling builder-ip methods product construct-aq. Director naluqaqtuq specific construction process, kisiani tunngavigivaa maligaq ammalu qanuq product construction.
Реализация
Fast food restaurant business case-tuugajaaq, typical combo burger ammalu cold drink. Burger Veg Burger imaluunniit Chicken Burger, ammalu packed carton-mut. Cold drink Coca-Cola (coke) imaluunniit Pepsi (pepsi), ammalu bottles-mi.
Sanajaaqut entity class food items (burger ammalu cold drink).ItemInterface ammalu implementationItemEntity class interface, ammalu entity class food packaging.PackingInterface ammalu implementationPackingEntity class interface; burger packed carton-mut, ammalu cold drink bottles-mi.
Taima sanajaaqutMealClass,ItemofArrayListammalu atausiq combiningItemsanajaq different types ofMealObject-ipMealBuilder。BuilderPatternDemoИспользование классаMealBuilderчтобы создатьMeal。
Шаг 1
Создайте интерфейс, представляющий продукты питания и упаковку продуктов.
Item.java
Packing.java
Шаг 2
Создайте классы сущностей, реализующие интерфейс Packing.
Wrapper.java
Bottle.java
Шаг 3
Создайте абстрактный класс, реализующий интерфейс Item, который предоставляет функциональность по умолчанию.
Burger.java
ColdDrink.java
Шаг 4
Создайте классы сущностей, которые расширяют Burger и ColdDrink.
VegBurger.java
ChickenBurger.java
Coke.java
Pepsi.java
Шаг 5
Создайте класс Meal, содержащий объекты Item, определённые выше.
Meal.java
Шаг 6
Создайте класс MealBuilder — фактический класс-строитель, отвечающий за создание объектов Meal.
MealBuilder.java
Шаг 7
BuiderPatternDemo использует MealBuilder для демонстрации паттерна Builder.
BuilderPatternDemo.java
Шаг 8
Выполните программу, выведите результат:
Veg Meal Item : Veg Burger, Packing : Wrapper, Price : 25.0 Item : Coke, Packing : Bottle, Price : 30.0 Total Cost: 55.0 Non-Veg Meal Item : Chicken Burger, Packing : Wrapper, Price : 50.5 Item : Pepsi, Packing : Bottle, Price : 35.0 Total Cost: 85.5