Latest web development tutorials

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для созданияеды.

Застройщик модели UML диаграмма

Шаг 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