Latest web development tutorials

Model Builder

Tryb konstruktor (budowniczy) stosując szereg prostych obiektów zbudować stopniowo na kompleks obiektu. Tego rodzaju wzorców projektowych należy stworzyć schemat, który zapewnia najlepszy sposób tworzenia obiektów.

Klasa Builder jest krok po kroku zbudować ostateczną obiekt. Klasa Builder jest niezależna od innych obiektów.

wprowadzenie

Zamiar: kompleks budować swoją separację reprezentacji, tak, że ten sam proces budowy może tworzyć różne reprezentacje.

Głównie do rozwiązania: główne rozwiązanie w systemie oprogramowania, czasami stoi "kompleksowy obiekt", aby stworzyć pracę, która jest zwykle pewien algorytm składa się z różnych części sub-object, ze względu na zmiany popytu, różne części tego złożonego zagadnienia często twarzą drastyczna zmiana, ale będą łączyć algorytm jest stosunkowo stabilna.

Kiedy stosować: nie będzie zmienić niektóre z podstawowych składników oraz ich kombinacje stale zmieniających się czasów.

Jak naprawić: zmieniony i niezmieniony rozdzielone.

Klucz Kod: Budowniczy: Tworzenie i podać przykłady, Dyrektor: Zarządzanie zależność zbudowany instancji.

Przykłady zastosowań: 1, przejdź do KFC, hamburgery, cola, frytki, smażone skrzydełka kurczaka itp jest stała, a jej skład ciągle się zmienia, tworząc tak zwany "pakiet".2, JAVA w StringBuilder.

Zalety: 1, niezależny konstruktor, łatwo rozszerzyć.2, łatwe do kontrolowania szczegóły ryzyka.

Wady: 1, produkt musi mieć ze sobą wspólnego, zakres jest ograniczony.2. Kompleks zmian wewnętrznych, nie będzie wiele klas budowlanych.

Scenariusze użycia: 1, należy wygenerować obiekt ma złożoną strukturę wewnętrzną.2, powinny być generowane wewnątrz właściwości obiektu samego siebie zależne.

Uwaga: Różnica między modelem zakładu jest: model Builder jest bardziej związane z kolejność montażu poszczególnych części.

realizacja

Zakładamy, że fast-food restauracja przypadku biznesu, w której pakiet może być typowy hamburger (Burger) i kieliszek zimnego (zimny napój). Burger (Burger) może być hamburgery wegetariańskie (Veg Burger) lub hamburgery z kurczaka (Chicken Burger), są one zapakowane w podajniku. Zimny ​​(napoje zimne) może być Coca-Cola (koks) i Pepsi (Pepsi), są one pakowane w butelki.

Będziemy tworzyć reprezentację produktów spożywczych (takich jak hamburgery i zimne) interfejsuElementinterfejsu i wdrożenie podmiot klasyelement,a jednostka interfejs i implementacja reprezentujepakowaniainterfejsOpakowania nażywność, Hamburg to pakiet w podajniku jest zimna pakowane w butelki.

Następnie tworzymyklasy MąkaArrayList iposiłekdo tworzenia różnych typów obiektów poprzez połączeniepozMealBuilder zpkt.BuilderPatternDemo pokazujemy użycie klasyMealBuilderstworzyćposiłek.

Budowniczy diagram UML

Etap 1

Tworzy interfejs wejścia i pakowanie żywności żywności.

Item.java

Element {public interface
   Nazwa public String ();
   Pakowanie publicznego pakowania ();
   Cena public float ();	
}

Packing.java

Pakowanie {public interface
   Pakiet public String ();
}

Etap 2

Opakowanie stworzyć podmiot klas implementować interfejs.

Wrapper.java

narzędzi public class Wrapper {pakowania

   @Override
   Pakiet public String () {
      w obie strony "Otulina";
   }
}

Bottle.java

narzędzia do pakowania butelek public class {

   @Override
   Pakiet public String () {
      w obie strony "Butelka";
   }
}

etap 3,

Załóż abstrakcyjny interfejs klasy produkt, klasa udostępnia funkcję domyślnego.

Burger.java

public abstract class Burger realizuje item {

   @Override
   Pakowanie publicznego pakowania () {
      powrót nowego Wrapper ();
   }

   @Override
   public abstract cena float ();
}

ColdDrink.java

public abstract class ColdDrink realizuje item {

	@Override
	Pakowanie publicznego pakowania () {
       powrót Nowa butelka ();
	}

	@Override
	public abstract cena float ();
}

Etap 4

Tworzenie rozszerzenia Burger i ColdDrink podmiot klas.

VegBurger.java

public class VegBurger rozciąga Burger {

   @Override
   Cena public float () {
      powrót 25.0f;
   }

   @Override
   Nazwa public String () {
      w obie strony "Veg Burger";
   }
}

ChickenBurger.java

public class Chickenburger rozciąga Burger {

   @Override
   Cena public float () {
      powrót 50.5f;
   }

   @Override
   Nazwa public String () {
      w obie strony "Chicken Burger";
   }
}

Coke.java

public class Coke rozciąga ColdDrink {

   @Override
   Cena public float () {
      powrót 30.0f;
   }

   @Override
   Nazwa public String () {
      w obie strony "Coke";
   }
}

Pepsi.java

public class Pepsi rozciąga ColdDrink {

   @Override
   Cena public float () {
      powrót 35.0f;
   }

   @Override
   Nazwa public String () {
      w obie strony "Pepsi";
   }
}

Etap 5

Tworzenie klasy Mąka z obiektem towaru określonego powyżej.

Meal.java

import java.util.ArrayList;
import java.util.List;

{public class Meal
   private List <Element> items = new ArrayList <item> ();	

   public void addItem (pozycja pozycja) {
      Items.Add (pozycja);
   }

   Pływak publicznego getCost () {
      Koszt pływak = 0.0f;
      dla (Sztuk: pozycje) {
         Koszt + = item.price ();
      }		
      zwrotu kosztów;
   }

   public void showItems () {
      dla (Sztuk: pozycje) {
         System.out.print ( "Item:" + item.name ());
         System.out.print (. "Pakowanie:" + Item.packing () paczka ());
         System.out.println ( "Cena" + item.price ());
      }		
   }	
}

Etap 6

MealBuilder utworzyć klasę, rzeczywisty konstruktor odpowiedzialny za tworzenie klasy Mąka obiekt.

MealBuilder.java

{public class MealBuilder

   Posiłek prepareVegMeal publicznego () {
      Mąka Mąka posiłek = new ();
      meal.addItem (New VegBurger ());
      meal.addItem (New Coke ());
      powrót posiłek;
   }   

   Posiłek prepareNonVegMeal publicznego () {
      Mąka Mąka posiłek = new ();
      meal.addItem (nowa Chickenburger ());
      meal.addItem (nowa Pepsi ());
      powrót posiłek;
   }
}

Krok 7

BuiderPatternDemo używać MealBuider wykazać trybu startowego (budowniczy).

BuilderPatternDemo.java

{public class BuilderPatternDemo
   public static void main (String [] args) {
      MealBuilder mealBuilder = new MealBuilder ();

      Mąka vegMeal = mealBuilder.prepareVegMeal ();
      System.out.println ( "Veg Meal");
      vegMeal.showItems ();
      System.out.println ( "Całkowity koszt:" + vegMeal.getCost ());

      Mąka nonVegMeal = mealBuilder.prepareNonVegMeal ();
      System.out.println ( "\ n \ nNon-Veg Meal");
      nonVegMeal.showItems ();
      System.out.println ( "Całkowity koszt:" + nonVegMeal.getCost ());
   }
}

Krok 8

Sprawdź, czy wyjście.

Veg Meal
Pozycja: Veg Burger, Opakowanie: Wrapper, Cena: 25,0
Pozycja: Koks, Opakowanie: Butelka, Cena: 30,0
Całkowity koszt: 55,0


Non-Veg Meal
Pozycja: Chicken Burger, Opakowanie: Wrapper, Cena: 50,5
Pozycja: Pepsi, Opakowanie: Butelka, Cena: 35.0
Całkowity koszt: 85,5