Definição: use instâncias de protótipo para especificar o tipo de objetos a serem criados e crie novos objetos copiando esses protótipos.
Tipo: Criar padrão de classe
Diagrama de classe:
O padrão de protótipo é usado principalmente para cópia de objetos e seu núcleo é o protótipo de classe de protótipo no diagrama de classes. A classe de protótipo precisa atender às duas condições a seguir:
Implementar interface clonável. Existe uma interface clonável na linguagem Java, que tem apenas uma função, que é notificar a máquina virtual em tempo de execução que pode usar com segurança o método clone nas classes que implementam essa interface. Em uma máquina virtual Java, apenas classes que implementam essa interface podem ser copiadas, caso contrário, uma clonenotsupportEdException será lançada em tempo de execução.
Reescreva o método clone na classe de objeto. Em Java, as classes pais de todas as classes são classes de objetos. Existe um método clone na classe de objeto, que retorna uma cópia do objeto, mas seu escopo é do tipo protegido e as classes gerais não podem ser chamadas. Portanto, a classe de protótipo precisa modificar o escopo do método clone para o tipo público.
O modo de protótipo é um modo relativamente simples e é muito fácil de entender. Para implementar uma interface e reescrever um método, o modo de protótipo é concluído. Em aplicações práticas, os padrões de protótipo raramente aparecem sozinhos. É frequentemente misturado com outros padrões, e seu protótipo de protótipo protótipo também é frequentemente substituído por classes abstratas.
Código de implementação:
pacote prototypepattern; classe pública prototypeClass implementa clonável {@Override PrototyPeClass clone () {prototyPeClass prototyPeClass = null; tente {prototypeClass = (prototyPeClass) super.clone (); } catch (clonenotsupportEdException e) {// TODO BLOCO DE CATAGEM AUTOGERATO E.PRINTSTACKTRACE (); } retornar prototyPeClass; }}Cliente:
pacote prototypepattern; public class cliente {public static void main (string [] args) {prototypeClass obj1 = new prototyPeClass (); PrototypeClass obj2 = obj1.clone (); System.out.println (obj1); System.out.println (obj2); }} Vantagens do modo de protótipo e cenários aplicáveis
Criar objetos usando o modo de protótipo é muito melhor do que diretamente novo, porque o método clone da classe de objeto é um método local que manipula diretamente fluxos binários na memória, especialmente ao copiar objetos grandes, a diferença de desempenho é muito óbvia.
Outro benefício do uso de padrões de protótipo é simplificar a criação de objetos, tornando a criação de objetos tão simples quanto copiar-se quando editamos um documento.
Devido às vantagens acima, você pode considerar o uso de padrões de protótipo quando precisar criar objetos semelhantes repetidamente. Por exemplo, você precisa criar um objeto em um corpo de loop. Se o processo de criação de objetos for mais complicado ou o número de ciclos for muitos, o uso do modo de protótipo pode não apenas simplificar o processo de criação, mas também melhorar muito o desempenho geral do sistema.
classe pública protótipo implementa clonável {private ArrayList List = new ArrayList (); protótipo público clone () {prototype prototype = null; tente {prototype = (prototype) super.clone (); prototype.List = (ArrayList) this.list.clone (); } catch (clonenotsupportEdException e) {e.printStackTrace (); } retornar protótipo; }}Notas no modo de protótipo:
Como o ArrayList não é um tipo básico, a lista de variáveis de membros não será copiada e precisamos implementar uma cópia profunda por nós mesmos. Felizmente, a maioria das classes de contêiner fornecidas pelo Java implementa a interface clonável. Portanto, não é particularmente difícil alcançar uma cópia profunda.
PS: Na cópia profunda e nos problemas de cópia rasa, ocorrerá uma cópia profunda, incluindo os tipos básicos em 8 Java e seus tipos de encapsulamento, e também existem tipos de string. O resto são cópias rasas.