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