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