Model Builder
Режим Builder (Builder шаблон) с использованием множества простых объектов для построения шаг за шагом в сложный объект. Этот тип шаблонов проектирования принадлежат создать схему, которая обеспечивает лучший способ для создания объектов.
Класс Builder представляет собой шаг за шагом, чтобы построить конечный объект. Класс Builder не зависит от других объектов.
введение
Намерение: комплекс построить свое отделение представление, так что тот же самый процесс строительства может создавать различные представления.
Главным образом , чтобы решить:главное решение в программной системе, иногда сталкиваются с "сложный объект" , чтобы создать работу, которая, как правило , определенный алгоритм состоит из различных частей подобъекте, в связи с изменением спроса, различные части этого сложного вопроса часто лицо резкое изменение, но они будут сочетать алгоритм является относительно стабильным.
Когда использовать: это не изменит некоторые из основных компонентов, а также их комбинации постоянно меняется раз.
Как исправить: измененный и неизменным разделены.
Код ключа: Builder: Создание и привести примеры, директор: управление зависимостями построены из экземпляра.
Примеры применения: 1, перейдите к KFC, гамбургеры, кола, картофель фри, жареные куриные крылышки и т.д. является постоянным, и его состав постоянно меняется, создавая так называемый "пакет" .2, JAVA в StringBuilder.
Преимущества: 1, независимый строитель, легко расширить.2, легко контролировать детали риска.
Недостатки: 1, продукт должен иметь в общем, диапазон ограничен.2. Комплекс внутренних изменений, там будет много строительных классов.
Сценарии использования: 1, необходимо создать объект имеет сложную внутреннюю структуру.2, должны быть сгенерированы внутри самого объекта недвижимости взаимозависимой.
Примечание: разница между моделью завода является: Builder модель больше связан с порядком сборки деталей.
реализация
Мы предполагаем, что фаст-фуд ресторан бизнес-кейс, в котором пакет может быть типичный гамбургер (бургер) и стакан холодной (холодный напиток). Бургер (Burger) может быть веджибургер (Вег Burger) или куриные котлеты (Chicken Burger), они обернуты в лоток для бумаги. Холодный (Холодный напиток) может быть Coca-Cola (кокс) или Пепси (пепси), они упакованы в бутылках.
Мы создадим представление продуктов питания (таких как гамбургеры и холодные) интерфейса и интерфейсаПунктреализации сущности классаItem,а также интерфейс и реализация сущности представляет собойупаковкипищевых продуктов упаковки интерфейсУпаковка,Hamburg является пакет в лоток для бумаги холодно упакованы в бутылках.
Затем мы создаемклассы еды,ArrayList иедойдля создания различных типов объектов с помощью комбинациипредметовMealBuilder сп.BuilderPatternDemo, мы продемонстрировать использование классаMealBuilderдля созданияеды.
Шаг 1
Создает интерфейс ввода продуктов питания и упаковки пищевых продуктов.
Item.java
Открытый интерфейс Пункт { имя общественного String (); общественного упаковки упаковка (); цена общественного поплавок (); }
Packing.java
открытый интерфейс Упаковка { Строка общественного упаковка (); }
Шаг 2
Упаковка создавать классы сущностей реализуют интерфейс.
Wrapper.java
Открытый класс Wrapper реализует Упаковка { @Override Строка общественности пакет () { вернуть "обёртка"; } }
Bottle.java
Открытый класс бутылки орудия упаковки { @Override Строка общественности пакет () { вернуть "Бутылка"; } }
Шаг 3
Создать абстрактный интерфейс класса Item, класс предоставляет функцию по умолчанию.
Burger.java
общественного абстрактного класса Burger реализует позицию { @Override общественного упаковки упаковка () { вернуть новой обертке (); } @Override общественного абстрактного цена с плавающей точкой (); }
ColdDrink.java
общественного абстрактного класса ColdDrink реализует пункт { @Override общественного упаковки упаковка () { вернуть новый флакон (); } @Override общественного абстрактного цена с плавающей точкой (); }
Шаг 4
Создание расширение Бюргера классов сущностей и ColdDrink.
VegBurger.java
Открытый класс VegBurger расширяет Burger { @Override цена общественного поплавок () { вернуть 25.0f; } @Override имя общественного String () { вернуть "Veg Бюргера"; } }
ChickenBurger.java
Открытый класс ChickenBurger расширяет Burger { @Override цена общественного поплавок () { вернуть 50.5f; } @Override имя общественного String () { вернуть "Chicken Burger"; } }
Coke.java
Открытый класс Кокс простирается ColdDrink { @Override цена общественного поплавок () { вернуть 30.0f; } @Override имя общественного String () { вернуться "Кокс"; } }
Pepsi.java
Открытый класс Пепси расширяет ColdDrink { @Override цена общественного поплавок () { вернуть 35.0f; } @Override имя общественного String () { вернуть "Пепси"; } }
Шаг 5
Создание класса муки грубого помола, с объектом Item, определенной выше.
Meal.java
импорт java.util.ArrayList; импорт java.util.List; Открытый класс Питания { частный List <Item> товар = новый ArrayList <Элемент> (); общественного недействительными AddItem (пункт Item) { items.Add (пункт); } общественного поплавка getCost () { стоимость поплавка = 0.0f; для (товара: пункты) { стоимость + = item.price (); } возврата стоимости; } общественного недействительными showItems () { для (товара: пункты) { System.out.print ( "Пункт:" + item.name ()); System.out.print ( "., Упаковка:" + Item.packing () упаковка ()); System.out.println ( "Цена:" + item.price ()); } } }
Шаг 6
MealBuilder создать класс, фактический строитель отвечает за создание объекта класса питания.
MealBuilder.java
Открытый класс MealBuilder { Питание prepareVegMeal общественности () { еда еда = новая еда (); meal.addItem (новый VegBurger ()); meal.addItem (новая кока-кола ()); вернуться еду; } Питание prepareNonVegMeal общественности () { еда еда = новая еда (); meal.addItem (новый ChickenBurger ()); meal.addItem (новый Пепси ()); вернуться еду; } }
Шаг 7
BuiderPatternDemo использовать MealBuider для демонстрации режима строитель (Builder Pattern).
BuilderPatternDemo.java
Открытый класс BuilderPatternDemo { государственной статической силы основных (String []) {агдз MealBuilder mealBuilder = новый MealBuilder (); Питание vegMeal = mealBuilder.prepareVegMeal (); System.out.println ( "Вег Питания"); vegMeal.showItems (); System.out.println ( "Общая стоимость:" + vegMeal.getCost ()); Питание nonVegMeal = mealBuilder.prepareNonVegMeal (); System.out.println ( "\ п \ nNon-Вег Питания"); nonVegMeal.showItems (); System.out.println ( "Общая стоимость:" + nonVegMeal.getCost ()); } }
Шаг 8
Проверьте выход.
Вег Питания Пункт: Вег Burger, Упаковка: Упаковочный, Цена: 25,0 Пункт: Кокс, Упаковка: Бутылка, Цена: 30,0 Общая стоимость: 55,0 Non-Вег Питания Пункт: Chicken Burger, Упаковка: Упаковочный, Цена: 50,5 Пункт: пепси, Упаковка: Бутылка, Цена: 35.0 Общая стоимость: 85,5