Latest web development tutorials

padrão de fábrica abstrata

Abstract Factory (Abstract Pattern Factory) é criada em torno de um super-planta outras plantas. A planta também é conhecida como super fábrica de outras fábricas. Este tipo de padrões de projeto pertencem criar esquema, que fornece a melhor maneira de criar objetos.

No padrão de fábrica abstrata, a interface é responsável por criar um relacionadas com plantas objetos, sem especificar explicitamente suas classes. Cada objecto gerado, de acordo com o modelo de fábrica pode fornecer fábrica.

introdução

Intenção: para criar uma série de interface de objetos relacionados ou dependentes, sem especificar suas classes concretas.

Principalmente para resolver: O principal problema das opções de interface.

Quando usar: produtos do sistema tiver mais de uma família de produtos, e o único sistema em que uma família de produtos de consumo.

Como corrigir: em uma família de produtos para dentro, definir vários produtos.

O código de chave: agregados vários produtos semelhantes em uma fábrica.

Exemplos de aplicação: o trabalho, a fim de participar em algumas reuniões, deve haver dois ou mais conjuntos de roupas que, digamos, traje de negócios (conjuntos completos, uma série de produtos específicos), vestido da forma (conjuntos completos, uma série de produtos específicos), mesmo para uma família você pode ter um negócio mulheres, homens de negócios de, moda feminina, moda masculina, eles também são conjuntos completos, ou seja, uma série de produtos específicos.Suponha que uma situação (na realidade não existe, ou então, não o comunismo, mas em favor da fábrica de inscrição padrão abstrato), em sua casa, um guarda-roupa (fábrica de concreto) só pode armazenar um tal roupas (conjuntos completos, uma série de produto específico), toda vez que você levar este conjunto de roupas do armário naturalmente retirado. Com OO pensar para entender, todo o guarda-roupa (central de betão) são roupeiros classe (Abstract Factory) um, e cada um conjunto de roupas e incluindo revestimento específico (um produto particular), calças (uma específica produto), estes são, de facto, camisa específica jaqueta (produtos abstratas), calças específicas são calças (outro produto abstrato).

Prós: Quando uma família de produtos mais objetos são projetados para trabalhar em conjunto, podemos garantir que o cliente use sempre apenas os mesmos objetos familiares produto.

Desvantagens: família de produtos estendida é muito difícil, para aumentar a gama de um produto, tanto no código de Riga abstract Criador, mas também para adicionar um código específico dentro.

cenários de uso: 1, QQ para a pele, um conjunto de mudanças em conjunto.2, gerar um diferentes procedimentos do sistema operacional.

Nota: A família deprodutos alargada é difícil, fácil de expandir o nível do produto.

realização

Vamos criar a interface interface e implementação de classeformaecordessas entidades. O próximo passo é criar umAbstractFactoryabstrato classe defábrica.Em seguida, definir oShapeFactoryclasse de fábrica eColorFactory,essas duas classes são de fábrica expandiuAbstractFactory.Em seguida, crie uma classeFactoryProducerfábrica criador /construtor.

AbstractFactoryPatternDemo,nossas aulas de demonstração utilizandoFactoryProducerpara obter objetoAbstractFactory.Ele passa formaformade informação(CIRCLE / RECTANGLE / QUADRADO)paraAbstractFactory,ele precisa obter o tipo de objeto. Ele também passa informações de corcores(vermelho / verde / azul) paraAbstractFactory,ele precisa obter o tipo de objeto.

padrão de fábrica abstrata UML diagrama

passo 1

Interface para criar uma forma.

Shape.java

Forma interface pública {
   draw void ();
}

passo 2

Criar classe de entidade que implementa a interface.

Rectangle.java

public class Rectangle implementa Forma {

   @Override
   draw public void () {
      System.out.println ( "Dentro do retângulo :: draw () método.");
   }
}

Square.java

public class Praça implementa Forma {

   @Override
   draw public void () {
      System.out.println ( "Inside Praça :: draw () método.");
   }
}

Circle.java

classe pública Círculo implementa Forma {

   @Override
   draw public void () {
      System.out.println ( "Inside Circle :: draw () método.");
   }
}

passo 3

Criar uma interface para a cor.

Color.java

interface pública cores {
   preenchimento de espaços vazios ();
}

passo 4

Criar classe de entidade que implementa a interface.

Red.java

public class Red implementa a cores {

   @Override
   public void preenchimento () {
      System.out.println ( "Inside Red :: fill () método.");
   }
}

Green.java

classe pública Verde implementa a cores {

   @Override
   public void preenchimento () {
      System.out.println ( "Inside Green :: fill () método.");
   }
}

Blue.java

implementa classe pública Cor Azul {

   @Override
   public void preenchimento () {
      System.out.println ( "Inside Azul :: fill () método.");
   }
}

passo 5

Criar uma classe abstrata para a cor ea forma de objetos para obter a fábrica.

AbstractFactory.java

AbstractFactory classe abstrata pública {
   Sumário da cor getColor (cor String);
   abstrato Forma getShape (forma String);
}

passo 6

Criar classe de fábrica AbstractFactory estendida, entidade geração objeto de classe com base na informação dada.

ShapeFactory.java

classe pública ShapeFactory estende AbstractFactory {
	
   @Override
   Forma pública getShape (String shapeType) {
      if (shapeType == null) {
         return null;
      }		
      if (shapeType.equalsIgnoreCase ( "CIRCLE")) {
         voltar new Circle ();
      } Else if (shapeType.equalsIgnoreCase ( "RETÂNGULO")) {
         voltar new Rectangle ();
      } Else if (shapeType.equalsIgnoreCase ( "quadrado")) {
         retornar nova Square ();
      }
      return null;
   }
   
   @Override
   Cor getColor (cor String) {
      return null;
   }
}

ColorFactory.java

classe pública ColorFactory estende AbstractFactory {
	
   @Override
   Forma pública getShape (String shapeType) {
      return null;
   }
   
   @Override
   Cor getColor (cor String) {
      if (cor == null) {
         return null;
      }		
      Se (color.equalsIgnoreCase ( "Vermelho")) {
         retornar vermelho novo ();
      } Else if (color.equalsIgnoreCase ( "verde")) {
         voltar novo Green ();
      } Else if (color.equalsIgnoreCase ( "BLUE")) {
         voltar novo Blue ();
      }
      return null;
   }
}

etapa 7

Criar uma fábrica categoria criador / construtor, passando pela forma ou cor informações para obter a fábrica.

FactoryProducer.java

FactoryProducer classe pública {
   getFactory AbstractFactory static (escolha String) {
      if (choice.equalsIgnoreCase ( "forma")) {
         retornar nova ShapeFactory ();
      } Else if (choice.equalsIgnoreCase ( "COLOR")) {
         retornar nova ColorFactory ();
      }
      return null;
   }
}

passo 8

Use FactoryProducer para obter AbstractFactory, para obter o objecto da classe fazendo passar a informação do tipo de entidade.

AbstractFactoryPatternDemo.java

classe pública AbstractFactoryPatternDemo {
   main (String [] args) public static void {

      // Obter a forma fábrica AbstractFactory shapeFactory = FactoryProducer.getFactory ( "forma");

      // Obter objeto de forma Círculo Forma Shape1 = shapeFactory.getShape ( "CIRCLE");

      // Chamar o método de sorteio de shape1.draw círculo ();

      // Obter objeto de forma Rectângulo shape2 = shapeFactory.getShape ( "RETÂNGULO");

      // Chamar o método de sorteio de retângulo shape2.draw ();
      
      // Obter a forma do objeto Quadrado shape3 = shapeFactory.getShape ( "quadrado");

      // Chamar o método draw Praça shape3.draw ();

      // Obter Fábricas cor AbstractFactory colorFactory = FactoryProducer.getFactory ( "COLOR");

      // Obter a cor do objeto é de cor vermelha color1 = colorFactory.getColor ( "RED");

      // Chamar o método de preenchimento color1.fill Red ();

      // Obter objeto de cor verde Cor color2 = colorFactory.getColor ( "verde");

      // Chama o método de preenchimento color2.fill do Green ();

      // Obter objeto de cor azul cores color3 = colorFactory.getColor ( "BLUE");

      // Chamar o método de preenchimento color3.fill Blue ();
   }
}

passo 9

Verifique saída.

Dentro Circle :: draw () método.
Dentro do retângulo :: draw () método.
Dentro Praça :: draw () método.
Dentro vermelho :: de enchimento () método.
Dentro método Green :: fill ().
Dentro Azul :: de enchimento () método.