Latest web development tutorials

Model Builder

Modo Builder (Pattern Builder) usando uma pluralidade de objetos simples para construir passo a passo para um objeto complexo. Este tipo de padrões de projeto pertencem criar esquema, que fornece a melhor maneira de criar objetos.

classe Builder é um passo a passo para construir o objeto final. A classe Builder é independente dos outros objetos.

introdução

Intenção: um complexo construir sua separação representação, de modo que o mesmo processo de construção possa criar diferentes representações.

Principalmente para resolver: a principal solução no sistema de software, às vezes enfrentando "um objeto complexo" para criar trabalho, que é geralmente um determinado algoritmo consiste em várias partes do sub-objeto, devido a mudanças na demanda, as várias partes deste assunto complexo, muitas vezes o rosto uma mudança drástica, mas eles vão combinar algoritmo é relativamente estável.

Quando usar: isso não vai mudar alguns dos componentes básicos e suas combinações em constante mutação vezes.

Como corrigir: o alterada e inalterada separados.

O código de chave: Construtor: Criar e fornecer exemplos, Director: gerenciamento de dependência construída instância.

Exemplos de aplicação: 1, vá para KFC, hambúrgueres, cola, batatas fritas, asas de frango fritas, etc. é constante, e sua composição está em constante mutação, gerando o chamado "pacote."2, JAVA em StringBuilder.

Vantagens: 1, um construtor independente, fácil de expandir.2, fácil de controlar os detalhes de risco.

Desvantagens: 1, o produto deve ter em comum, o alcance é limitado.2. As complexas mudanças internas, haverá um monte de classes de construção.

cenários de uso: 1, você precisa gerar o objeto tem uma estrutura interna complexa.2, precisam ser geradas dentro do próprio imóvel objeto interdependente.

Nota: A diferença entre o modelo da planta é: Modelo Builder está mais preocupado com a ordem de montagem das peças.

realização

Nós assumimos que um caso de negócio de restaurante fast-food, em que um pacote pode ser um hambúrguer típico (Burger) e um copo de frio (Bebida fria). Burger (Burger) pode ser hambúrgueres vegetarianos (Veg Burger) ou hambúrgueres de frango (frango Burger), eles são enrolados na bandeja de papel. Frio (bebida fria) pode ser uma Coca-Cola (coque) ou Pepsi (Pepsi), eles são embalados em garrafas.

Vamos criar uma representação de alimentos (tais como hambúrgueres e frio) de interface deIteme interface de aplicação entidade de classeItem,e uma entidade de interface e implementação representaembalagemalimentos interface deEmbalagemembalagem, Hamburgo é o pacote na bandeja de papel está frio acondicionados em frascos.

Então vamos criar algumasclasses refeição,ArrayList e umarefeiçãopara criar diferentes tipos de objetos por meio de uma combinação deMealBuilder itemcom oitem.BuilderPatternDemo, que demonstram a utilização de classeMealBuilderpara criar umarefeição.

A UML diagrama padrão do construtor

passo 1

Cria uma interface de entrada de alimentos e embalagens de alimentos.

Item.java

interface pública item {
   String nome pública ();
   Embalagem pública embalagem ();
   preço public float ();	
}

Packing.java

interface pública de embalagem {
   pacote public String ();
}

passo 2

Embalagem criar classes de entidade implementar a interface.

Wrapper.java

implementos Wrapper classe pública embalagem {

   @Override
   pacote public String () {
      retornar "Wrapper";
   }
}

Bottle.java

implementos classe pública Garrafa Embalagem {

   @Override
   pacote public String () {
      retornar "garrafa";
   }
}

passo 3

Criar uma interface abstrata classe Item, a classe fornece uma função padrão.

Burger.java

classe Burger abstrato pública implementa item {

   @Override
   Embalagem pública embalagem () {
      retornar nova Wrapper ();
   }

   @Override
   preço flutuador abstrato pública ();
}

ColdDrink.java

public abstract class ColdDrink implementa item {

	@Override
	Embalagem pública embalagem () {
       retornar nova garrafa ();
	}

	@Override
	preço flutuador abstrato pública ();
}

passo 4

Criando uma extensão do Burger classes de entidade e ColdDrink.

VegBurger.java

classe pública VegBurger estende Burger {

   @Override
   preço public float () {
      voltar 25.0f;
   }

   @Override
   String nome pública () {
      retornar "Veg Burger";
   }
}

ChickenBurger.java

classe pública Chickenburger estende Burger {

   @Override
   preço public float () {
      voltar 50.5f;
   }

   @Override
   String nome pública () {
      retornar "Chicken Burger";
   }
}

Coke.java

classe pública Coke estende ColdDrink {

   @Override
   preço public float () {
      voltar 30.0f;
   }

   @Override
   String nome pública () {
      retornar "Coke";
   }
}

Pepsi.java

classe pública Pepsi estende ColdDrink {

   @Override
   preço public float () {
      voltar 35.0f;
   }

   @Override
   String nome pública () {
      retornar "Pepsi";
   }
}

passo 5

Criar uma classe de refeições, com o objeto do item definido acima.

Meal.java

importação java.util.ArrayList;
import java.util.List;

Refeição classe pública {
   Lista privada <Item> itens = new ArrayList <Item> ();	

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

   public float getCost () {
      custo flutuador = 0.0f;
      for (artigo Item: itens) {
         custo + = item.price ();
      }		
      voltar custo;
   }

   showItems public void () {
      for (artigo Item: itens) {
         System.out.print ( "Item:" + item.name ());
         System.out.print (. ", Packing:" + Item.packing () pack ());
         System.out.println ( "Preço:" + item.price ());
      }		
   }	
}

passo 6

MealBuilder criar uma classe, o construtor real responsável pela criação de objeto de classe refeição.

MealBuilder.java

MealBuilder classe pública {

   pública de refeições prepareVegMeal () {
      Refeição refeição = new refeição ();
      meal.addItem (nova VegBurger ());
      meal.addItem (nova Coca-Cola ());
      voltar refeição;
   }   

   pública de refeições prepareNonVegMeal () {
      Refeição refeição = new refeição ();
      meal.addItem (nova Chickenburger ());
      meal.addItem (nova Pepsi ());
      voltar refeição;
   }
}

etapa 7

BuiderPatternDemo usar MealBuider para demonstrar o modo construtor (Pattern Builder).

BuilderPatternDemo.java

classe pública BuilderPatternDemo {
   main (String [] args) public static void {
      MealBuilder mealBuilder = new MealBuilder ();

      Refeição vegMeal = mealBuilder.prepareVegMeal ();
      System.out.println ( "Veg Meal");
      vegMeal.showItems ();
      System.out.println ( "Custo total:" + vegMeal.getCost ());

      Refeição nonVegMeal = mealBuilder.prepareNonVegMeal ();
      System.out.println ( "\ n \ nArquivos não-Veg Meal");
      nonVegMeal.showItems ();
      System.out.println ( "Custo total:" + nonVegMeal.getCost ());
   }
}

passo 8

Verifique saída.

veg Meal
Item: Veg Burger, Embalagem: envoltório, Preço: 25.0
Item: Coca-Cola, de embalagem: garrafa, Preço: 30.0
Custo total: 55,0


Non-Veg Meal
Item: frango Burger, Embalagem: envoltório, Preço: 50.5
Item: Pepsi, embalagem: garrafa, Preço: 35.0
Custo total: 85,5