1. 장면 설명
생성 모드에서 공장 메서드 모드, 추상 공장 모드, 빌더 모드, 프로토 타입 모드에 이르기까지 객체 생성 방식이 코딩 구현에서 메모리 객체 처리로 점차 이동한다는 것을 이해합니다.
예를 들어, "PDF 파일 데이터 수집기"및 "Excel 파일 데이터 수집기"의 서브 클래스/객체를 생성하는 동안
각 서브 클래스는 공장 모드에서 정의되며 (추상) 공장 클래스 공장에 의해 생성되므로 각 서브 클래스는 클래스 정의에서 해당 속성을 정의 할 수 있습니다.
빌더 모드에서, 다른 서브 객체는 다른 Creator 클래스 빌더를 통해 생성되며, 현재 하위 클래스는 더 이상 정의되지 않습니다.
프로토 타입 모드에서 발신자는 부모 객체 클로닝을 기반으로 자식 객체를 완전히 생성하며 자식 객체 또는 관련 공장 또는 빌더 클래스에 대한 클래스를 생성하지 않습니다.
세 가지 모드는 다른 시나리오에 해당합니다. 실제로 작동하면 모드는 시나리오에 따라 합리적으로 선택됩니다.
프로토 타입 모드에서, 새 개체는 프로토 타입 객체를 기반으로 작성되므로 프로토 타입 객체에 할당 된 속성 값은 새 개체에서 직접 사용할 수 있으므로 반복 된 할당을 제거 할 수 있습니다.
예를 들어, 계측기 데이터 수집기의 일반적인 초기화 작업은 프로토 타입 객체에서 완료 될 수 있으며, 이는 PDF 파일 데이터 수집기 개체와 Excel 파일 데이터 수집기 개체를 클로닝 할 수 있으며 두 객체 속성의 후속 확장이 제거되어 공개 속성의 초기화 작업을 제거합니다.
복제 작업은 메모리에서 완료됩니다. 객체 유형의 속성 값은 기준으로 저장되므로 클로닝은 얕은 클로닝 및 깊은 클로닝으로 나뉘어 진 일련의 인터페이스를 통해 깊은 클로닝이 실현됩니다.
2. 샘플 코드
원기:
패키지 lims.designpatterndemo.protoTypedemo; import java.io.bytearrayinputStream; import java.io.bytearrayoutputStream; import java.io.ioexception; import java.io.ObjectInputStream; import java.io.objectputstream; import classe java.io. 복제 가능, 직렬화 가능 {private String filepath = "파일 경로"; 개인 문자열 EquipmentData = "파일 컨텐츠"; // public String getFilePath () {reture this.FilePath; } public void setFilePath (String FilePath) {this.FilePath = FilePath; } public String getEquipmentData () {return this.equipmentData; } public void setequipmentData (String EquipmentData) {this.equipmentData = EquiptionData; } // private static final long serialversionuid = 1l; 개인 SerializableObject OBJ; // public serializableObject getObj () {return obj; } public void setobj (SerializableObject obj) {this.obj = obj; } // public EquipmentDatAcapture getEquipmentDatAcapture ()는 clonenotsupportedException {EquipmentDatAcapture Capture = (EquipmentDatAcapture) Super.Clone (); 리턴 캡처; } // public EquipmentDatAcapture getPdffileCapture ()는 clonenotsupportedException {// EquipmentDatAcapture Capture = (EquipmentDatAcapture) super.clone (); // capture.setequipmentData ( "PDF 파일 컨텐츠"); // 캡처 리턴; //} // public EquipmentDatAcapture getExCelfIleCapture ()는 ClonEnotSupportedException {// EquipmentDatAcapture Capture = (EquipmentDatAcapture) super.clone (); // capture.setequipmentData ( "Excel 파일 컨텐츠"); // 캡처 리턴; //}/* 딥 카피*/ public EquipmentDatAcapture NewIftDatAcapture ()는 ioException, classNotFoundException {/* 이진 스트림을 현재 객체에 쓰기*/ bytearRayoutputStream bos = 새로운 BYTEARRAYOUTPUTSTREAM (); ObjectOutputStream OOS = 새로운 ObjectOutputStream (BOS); oos.writeobject (this); /* 바이너리 스트림에 의해 생성 된 새 개체를 읽습니다*/ bytearrayinputStream bis = 새로운 BytearRayinputStream (bos.tobytearray ()); ObjectInputStream OIS = New ObjectInputStream (BIS); return (EquipmentDataCapture) ois.readobject (); }} Class SerializableObject 구현 시리얼 화성 {private static final long serialversionuid = 1l;}통화 측 :
package lims.designpatterndemo.protoTypedemo; public class prototypedemo {public static void main (String [] args)은 ClonenOntSupportedException {EquiverDatAcapture edc = 새로운 장비 dataCapture (); EquipmentDataCapture Capture = null; // capture = edc.getpdffilecapture (); // capture = edc.getexcelfilecapture (); capture = edc.getequipmentDatAcapture (); capture.setequipmentData ( "장비 데이터 파일 컨텐츠"); 문자열 filecontent = capture.getequipmentData (); System.out.println (filecontent); }}위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.