Latest web development tutorials

modelo de protótipo

modelo de protótipo (Padrão protótipo) é usado para criar um objeto duplicado, garantindo ao mesmo tempo o desempenho. Este tipo de padrões de projeto pertencem criar esquema, que fornece a melhor maneira de criar objetos.

Este modelo é um protótipo de interface, o qual é utilizado para criar um clone do objecto actual. Quando o custo direto da criação de um objeto é relativamente grande, em seguida, usando este modelo. Por exemplo, um objecto precisa de ser criado depois da base de dados é uma operação dispendiosa. Podemos cache o objecto da próxima vez que um pedido para voltar ao seu clone, o tempo necessário para actualizar a base de dados, a fim de reduzir as chamadas da base de dados.

introdução

Intenção: O protótipo usado para criar instâncias dos tipos de objetos específicos e criar novos objetos copiando o protótipo.

Principalmente para resolver: criar e excluir protótipo em tempo de execução.

Quando usar: 1, quando um sistema deve ser independente da sua criação do produto, composição e representação.2, quando uma instância da classe deve ser especificado em tempo de execução, por exemplo, o carregamento dinâmico. 3, a fim de evitar a criação de uma hierarquia de classes e hierarquia do produto quando a classe de fábrica paralelo. 4, quando uma instância de uma classe pode ter algumas combinações diferentes de estado de uma só vez. Estabelecer um número correspondente de protótipos e cloná-los pode ser mais conveniente do que o manual de cada vez com o estado apropriado da instância da classe.

Como resolver: a utilização deum objecto protótipo existente e produzir rapidamente protótipo objecto como um exemplo.

Código de chave: 1, para atingir o funcionamento clonagem, JAVA herança Cloneable, reescrever clone (), pode ser usado em MemberwiseClone classe .NET Objeto () método para alcançar o objeto da cópia ou serialização forma superficial para conseguir uma cópia em profundidade.2, o mesmo modelo de protótipo para o acoplamento entre o usuário e o isolamento tipo específico (tipo de variável) entre o objeto de classe, ele também requer que estes "tipo de variável" tem uma relação estável.

Exemplos de aplicação: 1, a divisão celular.2, JAVA no método clone Object ().

Vantagens: 1, o desempenho é melhorado.2 escapar construtor restrição.

Desvantagens: 1, com um método de clonagem requer levar em consideração a classe de funções, que a nova classe não é difícil, mas para classes existentes pode não ser muito fácil, especialmente quando uma referência de classe não suporta a serialização de objeto indireto, ou uma estrutura cíclica contendo uma referência ao tempo.2, deve implementar a interface Cloneable. 3, evitar construtor restrição.

cenários de uso: 1, cenários de otimização de recursos.2, a inicialização da classe precisa para digerir uma grande quantidade de recursos, incluindo os dados de recursos, recursos de hardware. 3, o desempenho e os requisitos de segurança da cena. 4, através da geração de um novo objeto requer uma preparação ou os dados de acesso muito tedioso, você pode usar o modelo de protótipo. 5, uma pluralidade de objectos modificados por cena. 6, um objeto precisa fornecer acesso a outros objetos, e cada chamador pode precisar modificar o seu valor, considere o uso de um modelo de protótipo para várias cópias de objetos usados ​​pelo chamador. 7, no projeto real, o modelo de protótipo raramente ocorrem sozinho, e método de fábrica padrão geralmente aparecem juntos, criar um método clone do objeto, e depois fornecido para o chamador pelo método de fábrica. E modelo de protótipo Java foi incorporado como um todo integral, ele pode ser facilmente usado para usar.

Nota: Com uma classe por instanciar para construir o novo objeto é diferente, modelo de protótipo é gerar um novo objeto, copiando um objeto existente.cópia superficial perceber Cloneable, regravar uma cópia profunda é lido fluxo binário, implementando Serializable.

realização

Vamos criar umaformaclasse abstrata e estende a classeFormaclasses de entidade. O próximo passo é para definir aShapeCache classe,a forma de tais objectos são armazenados numatabela de hashno, e no momento do pedido de voltar aos seus clones.

PrototypPatternDemo,nossas aulas de demonstração usando classShapeCachepara obter o objetoShape.

modelo de protótipo UML diagrama

passo 1

Criar uma classe abstrata que implementa a interfaceclonable.

Shape.java

classe Shape abstrato pública implementa Cloneable {
   
   id private String;
   protegidos tipo String;
   
   abstrato empate void ();
   
   Cadeia getType pública () {
      tipo de retorno;
   }
   
   Cadeia getId pública () {
      retornar id;
   }
   
   setId public void (string id) {
      this.id = id;
   }
   
   public Object clone () {
      Objeto clone = null;
      try {
         clone super.clone = ();
      } Catch (CloneNotSupportedException e) {
         e.printStackTrace ();
      }
      voltar clone;
   }
}

passo 2

Criar classes de entidade acima estende a classe abstrata.

Rectangle.java

classe pública Retângulo estende Forma {

   pública Retângulo () {
     type = "retângulo";
   }

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

Square.java

public class Praça estende Forma {

   Praça pública () {
     type = "Quadrado";
   }

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

Circle.java

classe pública Círculo estende Forma {

   pública círculo () {
     type = "Circle";
   }

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

passo 3

Criar uma classe, obter classes de entidade do banco de dados, e os armazena em umHashtableem.

ShapeCache.java

import java.util.Hashtable;

ShapeCache classe pública {
	
   private static Hashtable <String, Shape> shapeMap 
      = Novo Hashtable <String, Shape> ();

   Forma public static getShape (String shapeId) {
      Forma cachedShape = shapeMap.get (shapeId);
      retorno (Shape) cachedShape.clone ();
   }

   // Para cada banco de dados consultas forma funcionamento e criar a forma // shapeMap.put (ShapeKey, forma);
   // Por exemplo, nós queremos adicionar três formas loadCache public static void () {
      Círculo círculo = new Circle ();
      circle.setId ( "1");
      shapeMap.put (circle.getId (), círculo);

      Praça quadrado = new Square ();
      square.setId ( "2");
      shapeMap.put (square.getId (), quadrado);

      Retângulo retângulo = new Rectangle ();
      rectangle.setId ( "3");
      shapeMap.put (rectangle.getId (), retângulo);
   }
}

passo 4

PrototypePatternDemousar classeShapeCachepara obter a forma do clone é armazenadona tabela de hash.

PrototypePatternDemo.java

classe pública PrototypePatternDemo {
   main (String [] args) public static void {
      ShapeCache.loadCache ();

      Forma clonedShape = ShapeCache.getShape (Shape) ( "1");
      System.out.println ( "Shape:" + clonedShape.getType ());		

      Forma clonedShape2 = ShapeCache.getShape (Shape) ( "2");
      System.out.println ( "Shape:" + clonedShape2.getType ());		

      Forma clonedShape3 = ShapeCache.getShape (Shape) ( "3");
      System.out.println ( "Shape:" + clonedShape3.getType ());		
   }
}

passo 5

Verifique saída.

Forma: Círculo
Forma: Quadrado
Forma: Retângulo