Latest web development tutorials

Model Builder

mode Builder (Constructeur de Pattern) en utilisant une pluralité d'objets simples à construire étape par étape dans un objet complexe. Ce type de modèles de conception appartiennent create schema, qui fournit la meilleure façon de créer des objets.

classe Builder est une étape par étape pour construire l'objet final. La classe de constructeur est indépendant des autres objets.

introduction

Intention: un complexe construire sa séparation de représentation, de sorte que le même processus de construction peut créer différentes représentations.

Principalement pour résoudre: la principale solution dans le système logiciel, parfois face à «un objet complexe" pour créer des emplois, ce qui est généralement un certain algorithme se compose de différentes parties du sous-objet, en raison de changements dans la demande, les différentes parties de ce sujet complexe souvent le visage un changement radical, mais ils combinera algorithme est relativement stable.

Quand l'utiliser: il ne changera pas certains des composants de base, et leurs combinaisons en constante évolution fois.

Comment réparer: l'changé et inchangée séparés.

Le code clé: Constructeur: Créer et fournir des exemples, Directeur: gestion des dépendances construit en instance.

Exemples d'application: 1, aller à KFC, hamburgers, cola, frites, ailes de poulet frit, etc. est constante, et sa composition est en constante évolution, la génération d' un soi-disant «package».2, JAVA dans StringBuilder.

Avantages: 1, un constructeur indépendant, facile à étendre.2, facile à contrôler les détails de risque.

Inconvénients: 1, le produit doit avoir en commun, la gamme est limitée.2. Les changements internes complexes, il y aura un grand nombre de classes de construction.

Scénarios d' utilisation:1, vous avez besoin pour générer l'objet a une structure interne complexe. 2, doivent être généré à l'intérieur de la propriété de l'objet lui-même interdépendant.

Remarque: La différence entre le modèle de plante est: modèle Builder est plus soucieux de l'ordre d'assemblage des pièces.

réalisation

Nous supposons que le cas restauration fast-food, dans lequel un paquet peut être un hamburger typique (Burger) et un verre de froid (boisson froide). Burger (Burger) peut être hamburgers végétariens (Veg Burger) ou des hamburgers de poulet (Chicken Burger), ils sont enveloppés dans le bac à papier. Froid (boisson froide) peut être un Coca-Cola (coke) ou Pepsi (pepsi), ils sont emballés dans des bouteilles.

Nous allons créer une représentation des produits alimentaires (tels que des hamburgers et froide) de l' interfaced'objetet de l' interface mise en œuvre entité classed'objet,et une entité d'interface et la mise en œuvre représenteemballagedes aliments emballage interfaceemballage,Hambourg est le paquet dans le bac à papier est froide conditionné dans des bouteilles.

Ensuite , nous créons uncoursderepas,ArrayList et unrepaspour créer différents types d'objets à travers une combinaison de l'articleMealBuilder avecItem.BuilderPatternDemo, nous démontrons l'utilisation de la classeMealBuilderpour créer unrepas.

Le modèle de diagramme UML builder

Etape 1

Crée une interface d'entrée de l'alimentation et les emballages alimentaires.

Item.java

interface publique Item {
   Nom public String ();
   Emballage publique d'emballage ();
   Prix ​​public float ();	
}

Packing.java

interface publique d'emballage {
   pack public String ();
}

Etape 2

Emballage créer des classes d'entités mettent en œuvre l'interface.

Wrapper.java

outils Wrapper public class emballage {

   @Override
   pack public String () {
      retour "Wrapper";
   }
}

Bottle.java

Bouteille public class outils d'emballage {

   @Override
   pack public String () {
      retour "Bottle";
   }
}

Etape 3

Créer une interface de classe d'objet abstraite, la classe fournit une fonction par défaut.

Burger.java

Burger public abstract class implémente Item {

   @Override
   Emballage publique d'emballage () {
      return new Wrapper ();
   }

   @Override
   prix float public abstract ();
}

ColdDrink.java

public abstract class ColdDrink implémente Item {

	@Override
	Emballage publique d'emballage () {
       retour nouvelle bouteille ();
	}

	@Override
	prix float public abstract ();
}

Etape 4

Création d'une extension de la classe d'entités Burger et ColdDrink.

VegBurger.java

public class VegBurger étend Burger {

   @Override
   Prix ​​public float () {
      retour 25.0f;
   }

   @Override
   Nom public String () {
      retour "Veg Burger";
   }
}

ChickenBurger.java

public class Chickenburger étend Burger {

   @Override
   Prix ​​public float () {
      retour 50.5f;
   }

   @Override
   Nom public String () {
      retourner "Chicken Burger";
   }
}

Coke.java

public class Coke étend ColdDrink {

   @Override
   Prix ​​public float () {
      retour 30.0f;
   }

   @Override
   Nom public String () {
      retour "Coke";
   }
}

Pepsi.java

public class Pepsi étend ColdDrink {

   @Override
   Prix ​​public float () {
      retour 35.0f;
   }

   @Override
   Nom public String () {
      retour "Pepsi";
   }
}

Etape 5

Créer une classe de repas, avec l'objet de l'article défini ci-dessus.

Meal.java

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

public class Repas {
   Liste privée <article> articles = new ArrayList <article> ();	

   public void addItem (Item item) {
      Items.Add (point);
   }

   flottant getCost () {
      coût float = 0.0f;
      pour (point d'objet: objets) {
         coût + = item.price ();
      }		
      retour coûts;
   }

   showItems public void () {
      pour (point d'objet: objets) {
         System.out.print ( "objet:" + item.name ());
         System.out.print (. ", Emballage:" + Item.packing () pack ());
         System.out.println ( ", Prix:" + item.price ());
      }		
   }	
}

Etape 6

MealBuilder créer une classe, le constructeur réelle responsable de la création objet de classe de repas.

MealBuilder.java

public class MealBuilder {

   Repas publique prepareVegMeal () {
      Repas repas = new repas ();
      meal.addItem (nouveau VegBurger ());
      meal.addItem (nouveau Coke ());
      retourner repas;
   }   

   Repas publique prepareNonVegMeal () {
      Repas repas = new repas ();
      meal.addItem (nouveau Chickenburger ());
      meal.addItem (nouveau Pepsi ());
      retourner repas;
   }
}

Etape 7

BuiderPatternDemo utiliser MealBuider pour démontrer le mode constructeur (Builder Pattern).

BuilderPatternDemo.java

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

      Repas vegMeal = mealBuilder.prepareVegMeal ();
      System.out.println ( "Veg Meal");
      vegMeal.showItems ();
      System.out.println ( "Coût total:" + vegMeal.getCost ());

      Repas nonVegMeal = mealBuilder.prepareNonVegMeal ();
      System.out.println ( "\ n \ nLes Veg Meal");
      nonVegMeal.showItems ();
      System.out.println ( "Coût total:" + nonVegMeal.getCost ());
   }
}

Etape 8

Vérifiez la sortie.

Veg Repas
Item: Veg Burger, Emballage: Wrapper, Prix: 25,0
Item: Coke, Emballage: Bouteille, Prix: 30.0
Coût total: 55,0


Non-Veg Repas
Item: Chicken Burger, Emballage: Wrapper, Prix: 50.5
Item: Pepsi, Emballage: Bouteille, Prix: 35.0
Coût total: 85,5