1. Descrição da cena
No modo de criação, desde o modo de método de fábrica, o modo de fábrica abstrato, até o modo Builder e, em seguida, para o modo de protótipo, meu entendimento é que a maneira de criar objetos é gradualmente transferida de codificar a implementação para o processamento de objetos de memória.
Por exemplo, durante a criação da subclasse/objetos de "coletor de dados de arquivos pdf" e "coletor de dados de arquivos do Excel",
Cada subclasse é definida no modo de fábrica e é criada pela fábrica de classe (abstrata), para que cada subclasse possa definir suas respectivas propriedades na definição de classe;
No modo Builder, diferentes subobjetos são criados através de diferentes classes de criadores, e as subclasses não são mais definidas neste momento;
No modo de protótipo, o chamador cria objetos infantis totalmente com base na clonagem de objeto pai e não cria classes para o objeto filho ou suas classes de fábrica ou construtor relacionadas.
Os três modos correspondem a diferentes cenários. Ao realmente operar, o modo é selecionado razoavelmente de acordo com o cenário.
No modo de protótipo, um novo objeto é criado com base no objeto Prototype, portanto, os valores de atributo atribuídos ao objeto protótipo podem ser usados diretamente no novo objeto, eliminando atribuições repetidas;
Por exemplo, o trabalho de inicialização comum do coletor de dados do instrumento pode ser concluído no objeto Prototype, que pode ser clonado do objeto de coletor de dados de dados do arquivo PDF e o objeto de coletor de dados do Excel Arquivo, e a expansão subsequente das propriedades de dois objetos é eliminada, o que elimina a obra de inicialização dos atributos públicos;
A operação de clonagem é concluída na memória. Como o valor do atributo do tipo de objeto é armazenado como uma referência, a clonagem é dividida em clonagem superficial e clonagem profunda, e a clonagem profunda é realizada através da interface serializável.
2. Código de amostra
Protótipo:
pacote lim.designpatterndemo.prototypeDemo; importar java.io.byteArrayInputStream; importar java.io.byteArrayOutputStream; importar java.io.ioException; importação java.io.objectinputream; import java.io.ObjectUTream; importação Clonável, serializável {private string filepath = "caminho do arquivo"; Private String EquipmentData = "Conteúdo do arquivo"; // public String getFilePath () {return this.FilePath; } public void setFilePath (string filepath) {this.FilePath = filepath; } public string getequipmentData () {return this.EquipmentData; } public void setEquipmentData (String EquipmentData) {this.EQuipmentData = EquipmentData; } // private estático final serialversionuid = 1L; SerializableObject privado OBJ; // public SerializableObject getObj () {return obj; } public void setObj (serializableObject obj) {this.obj = obj; } // Public EquipmentDataCapture getEquipmentDataCapture () lança clonenotsupportEdException {EquipmentDataCapture Capture = (EquipmentDataCapture) Super.Clone (); Captura de retorno; } // Public EquipmentDatAcApture getpdffilECapture () lança clonenotsupportEdException {// EquipmentDatacApture Capture = (EquipmentDataCapture) Super.Clone (); // capture.setequipmentData ("Conteúdo do arquivo pdf"); // Return Capture; //} // Public EquipmentDataCapture getExcelFilecapture () lança CLONENOTSupportEdException {// EquipmentDatacApture Capture = (EquipmentDataCapture) Super.Clone (); // Capture.seteQuipmentData ("Conteúdo do arquivo do Excel"); // Return Capture; //}/* cópia profunda*/ public EquipmentDataCapture newequipmentDataCapture () lança IoException, classNotFoundException {/* Escreva fluxo binário no objeto atual*/ byteArrayOutputStream bos = newTearTrayOutputStream (); ObjectOutputStream ooS = new ObjectOutputStream (BOS); OOS.WriteObject (this); /* Leia o novo objeto gerado pelo fluxo binário*/ byteArrayInputStream bis = new ByteArrayInputStream (bos.tobytearray ()); ObjectInputStream ois = new ObjectInputStream (bis); retorno (equipamentoDATACAPTURE) OIS.readObject (); }} classe serializableObject implementa serializável {private estático final serialversionuid = 1l;}LIGO LIGADO:
pacote lim.designpatterndemo.prototypeDemo; classe pública prototypeDemo {public static void main (string [] args) lança clonenotsupportedException {EquipmentDataCapture edc = new EquipmentDataCapture (); EquipmentDATACAPTURE Capture = NULL; // Capture = Edc.getpdffilecapture (); // Capture = EDC.GetexCelFilecApture (); capture = edc.GeteQuipmentDataCapture (); Capture.SetequipmentData ("Conteúdo do arquivo de dados do equipamento"); String fileContent = capture.getequipmentData (); System.out.println (FileContent); }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.