Latest web development tutorials

Model Builder

Modo Constructor (Builder) usando una pluralidad de objetos simples para construir paso a paso en un objeto complejo. Este tipo de patrones de diseño pertenecen crear esquema, que proporciona la mejor manera de crear objetos.

El generador de clase es un paso a paso para construir el objeto final. La clase Builder es independiente de los otros objetos.

introducción

Propósito: un complejo de construir su separación representación, por lo que el mismo proceso de construcción puede crear diferentes representaciones.

Principalmente para resolver: la solución principal en el sistema de software, a veces frente a "un objeto complejo" para crear trabajo, que es por lo general un cierto algoritmo consiste en varias partes de la sub-objeto; debido a cambios en la demanda, las diversas partes de este tema complejo a menudo la cara un cambio drástico, sino que combinará algoritmo es relativamente estable.

Cuándo utilizar: no va a cambiar algunos de los componentes básicos, y combinaciones de los mismos constantemente nuevos tiempos.

Cómo corregir: el cambiado y sin cambios separados.

El código de la llave: Constructor: Crear y dar ejemplos, Director: gestión de la dependencia construida instancia.

Ejemplos de aplicación: 1, ir a KFC, hamburguesas, refrescos de cola, patatas fritas, alas de pollo frito, etc. es constante, y su composición está cambiando constantemente, lo que genera un denominado "paquete".2, JAVA en StringBuilder.

Ventajas: 1, un constructor independiente, fácil de ampliar.2, fácil de controlar los detalles de riesgo.

Desventajas: 1, el producto ha de tener en común, la gama es limitada.2. Los complejos cambios internos, habrá una gran cantidad de clases de construcción.

Escenarios de uso: 1, lo que necesita para generar el objeto tiene una estructura interna compleja.2, necesita ser generado en el interior del propio inmueble objeto interdependientes.

Nota: La diferencia entre el modelo de la planta es: un generador de modelos está más preocupado por el orden de montaje de las piezas.

realización

Suponemos que un caso de negocio de los restaurantes de comida rápida, en la que un paquete puede ser una hamburguesa típica (hamburguesa) y una copa de (bebida fría) frío. Burger (hamburguesa) puede ser hamburguesas vegetales Veg (hamburguesa) o hamburguesas de pollo (pollo hamburguesa), que están envueltos en la bandeja de papel. Fría (bebida fría) puede ser una Coca-Cola (coque) o Pepsi (Pepsi), que se envasan en botellas.

Vamos a crear una representación de los alimentos (tales como hamburguesas y frío) de interfaz depuntoylainterfaz de la aplicación entidad clasede artículos,y una entidad de interfaz e implementación representa alimentos interfaz deembalajede envasesde embalaje,Hamburgo es el paquete en la bandeja de papel está fría envasados ​​en botellas.

Entonces se crea unaclaseArrayListcomida,y unacomidapara crear diferentes tipos de objetos a través de una combinación deMealBuilder elementoconelartículo.BuilderPatternDemo,que demuestran el uso de la claseMealBuilderpara crear unacomida.

El diagrama UML Builder

Paso 1

Crea un interfaz de entrada de alimentos y envases de alimentos.

Item.java

interfaz pública de artículos {
   Nombre public String ();
   embalaje pública Embalaje ();
   precio de flotación pública ();	
}

Packing.java

interfaz pública de embalaje {
   paquete public String ();
}

Paso 2

Embalaje crear clases de entidad implementan la interfaz.

Wrapper.java

implementos de embalaje contenedor de clase pública {

   @ Override
   paquete public String () {
      volver "envoltura";
   }
}

Bottle.java

implementos Botella clase pública {embalaje

   @ Override
   paquete public String () {
      volver "botella";
   }
}

paso 3

Crear una interfaz de clase de artículos resumen, la clase proporciona una función predeterminada.

Burger.java

Hamburguesa pública clase abstracta implementa artículo {

   @ Override
   Embalaje embalaje pública () {
      volver nueva envoltura ();
   }

   @ Override
   precio flotador abstracto pública ();
}

ColdDrink.java

clase abstracta implementa pública ColdDrink artículo {

	@ Override
	Embalaje embalaje pública () {
       volver nueva botella ();
	}

	@ Override
	precio flotador abstracto pública ();
}

Paso 4

La creación de una extensión de la hamburguesa y las clases de entidad ColdDrink.

VegBurger.java

clase pública se extiende VegBurger hamburguesa {

   @ Override
   precio de flotación pública () {
      volver 25.0f;
   }

   @ Override
   Nombre public String () {
      volver "Veg hamburguesa";
   }
}

ChickenBurger.java

clase pública se extiende Chickenburger hamburguesa {

   @ Override
   precio de flotación pública () {
      volver 50.5f;
   }

   @ Override
   Nombre public String () {
      volver "Hamburguesa de Pollo";
   }
}

Coke.java

public class Coca-Cola se extiende ColdDrink {

   @ Override
   precio de flotación pública () {
      volver 30.0f;
   }

   @ Override
   Nombre public String () {
      volver "Coca-Cola";
   }
}

Pepsi.java

clase pública se extiende Pepsi ColdDrink {

   @ Override
   precio de flotación pública () {
      volver 35.0f;
   }

   @ Override
   Nombre public String () {
      volver "Pepsi";
   }
}

paso 5

Crear una clase de comidas, con el objeto de artículo definido anteriormente.

Meal.java

java.util.ArrayList importación;
java.util.List importación;

Comida public class {
   Lista privada <Elemento> artículos = new ArrayList <Elemento> ();	

   public void addItem (artículo) {
      Items.Add (punto);
   }

   getCost flotación pública () {
      costo de flotación = 0.0f;
      para (artículo: artículos) {
         costo + = item.price ();
      }		
      coste de vuelta;
   }

   showItems public void () {
      para (artículo: artículos) {
         System.out.print ( "artículo:" + item.name ());
         System.out.print (. ", Embalaje:" + Item.packing () pack ());
         System.out.println ( "Precio:" + item.price ());
      }		
   }	
}

paso 6

MealBuilder crear una clase, el constructor real responsable de la creación de objeto de clase de comidas.

MealBuilder.java

MealBuilder public class {

   público de comidas prepareVegMeal () {
      comida comida comida = new ();
      meal.addItem (nueva VegBurger ());
      meal.addItem (nueva Coca-Cola ());
      harina de retorno;
   }   

   público de comidas prepareNonVegMeal () {
      comida comida comida = new ();
      meal.addItem (nueva Chickenburger ());
      meal.addItem (nueva Pepsi ());
      harina de retorno;
   }
}

paso 7

BuiderPatternDemo utilizar MealBuider para demostrar el modo de constructor (Builder).

BuilderPatternDemo.java

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

      Comida vegMeal = mealBuilder.prepareVegMeal ();
      System.out.println ( "Veg comidas");
      vegMeal.showItems ();
      System.out.println ( "Coste total:" + vegMeal.getCost ());

      Comida nonVegMeal = mealBuilder.prepareNonVegMeal ();
      System.out.println ( "\ n \ nNon-Veg comidas");
      nonVegMeal.showItems ();
      System.out.println ( "Coste total:" + nonVegMeal.getCost ());
   }
}

paso 8

Verifique la salida.

veg comidas
Artículo: Veg hamburguesa, Embalaje: Envoltura, Precio: 25.0
Artículo: Coca-Cola, Embalaje: Botella, Precio: 30.0
Costo total: 55,0


No vegetariano comida
Artículo: Hamburguesa de Pollo, Embalaje: Envoltura, Precio: 50.5
Artículo: Pepsi, Embalaje: Botella, Precio: 35.0
Costo total: 85,5