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.
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