정의 : 프로토 타입 인스턴스를 사용하여 생성 할 객체 유형을 지정하고 이러한 프로토 타입을 복사하여 새 개체를 만듭니다.
유형 : 클래스 패턴을 만듭니다
클래스 다이어그램 :
프로토 타입 패턴은 주로 객체 복사에 사용되며 핵심은 클래스 다이어그램의 프로토 타입 클래스 프로토 타입입니다. 프로토 타입 클래스는 다음 두 가지 조건을 충족해야합니다.
복제 가능한 인터페이스를 구현하십시오. Java 언어에는 클로닝 가능한 인터페이스가 있습니다.이 기능은 하나의 기능 만 있는데,이 인터페이스를 구현하는 클래스에서 복제 메소드를 안전하게 사용할 수있는 런타임에 가상 머신을 알리는 것입니다. Java Virtual Machine에서는이 인터페이스를 구현하는 클래스 만 복사 할 수 있습니다. 그렇지 않으면 ClonenotsupportedException이 런타임에 발생합니다.
객체 클래스에서 복제 메소드를 다시 작성하십시오. Java에서는 모든 클래스의 상위 클래스가 객체 클래스입니다. 객체 클래스에는 복제 메소드가 있는데, 이는 객체의 사본을 반환하지만 그 범위는 보호 된 유형이며 일반 클래스를 호출 할 수 없습니다. 따라서 프로토 타입 클래스는 클론 방법의 범위를 공공 유형으로 수정해야합니다.
프로토 타입 모드는 비교적 단순한 모드이며 이해하기 쉽습니다. 인터페이스를 구현하고 메소드를 다시 작성하려면 프로토 타입 모드가 완료됩니다. 실제 응용 분야에서 프로토 타입 패턴은 거의 단독으로 나타나지 않습니다. 종종 다른 패턴과 혼합되며 프로토 타입 클래스 프로토 타입은 종종 추상 클래스로 대체됩니다.
구현 코드 :
패키지 프로토 타이 패터 넷; 공개 클래스 프로토 타입 클래스는 복제 가능한 {@override 보호 된 프로토 타이 클래스 클론 () {프로토 타이 클래스 프로토 타이 클래스 = null; try {prototypeclass = (protoTypeclass) super.clone (); } catch (clonenotsupportedException e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); } return prototypeclass; }}고객:
패키지 프로토 타이 패터 넷; public class client {public static void main (String [] args) {prototypeclass obj1 = new ProtoTypeClass (); 프로토 타이 클래스 obj2 = obj1.clone (); System.out.println (OBJ1); System.out.println (OBJ2); }} 프로토 타입 모드 및 해당 시나리오의 장점
객체 클래스의 클론 메소드는 메모리에서 이진 스트림을 직접 조작하는 로컬 메소드, 특히 큰 객체를 복사 할 때 성능 차이가 매우 분명하기 때문에 프로토 타입 모드를 사용하여 객체를 생성하는 것은 직접 새로운 것보다 훨씬 낫습니다.
프로토 타입 패턴을 사용하는 또 다른 이점은 객체 생성을 단순화하여 문서를 편집 할 때 객체 생성을 카피 페이스트처럼 간단하게 만드는 것입니다.
위의 장점으로 인해 비슷한 객체를 반복적으로 만들어야 할 때 프로토 타입 패턴을 사용하는 것을 고려할 수 있습니다. 예를 들어, 루프 본체에 객체를 만들어야합니다. 객체 생성 프로세스가 더 복잡하거나 사이클 수가 많으면 프로토 타입 모드를 사용하면 생성 프로세스를 단순화 할뿐만 아니라 시스템의 전반적인 성능을 많이 향상시킬 수 있습니다.
공개 클래스 프로토 타입 구현 클로닝 가능 {private arraylist list = new ArrayList (); 공개 프로토 타입 클론 () {프로토 타입 프로토 타입 = null; try {prototype = (프로토 타입) super.clone (); 프로토 타입 .list = (arraylist) this.list.clone (); } catch (clonenotsupportedException e) {e.printstacktrace (); } 리턴 프로토 타입; }}프로토 타입 모드에 대한 메모 :
ArrayList는 기본 유형이 아니기 때문에 멤버 변수 목록은 복사되지 않으며 직접 딥 카피를 구현해야합니다. 다행히 Java가 제공하는 대부분의 컨테이너 클래스는 복제 가능한 인터페이스를 구현합니다. 따라서 깊은 복사를 달성하는 것은 특히 어렵지 않습니다.
추신 : 딥 카피와 얕은 사본 문제에서는 8 개의 Java의 기본 유형과 캡슐화 유형을 포함하여 딥 카피가 발생하며 문자열 유형도 있습니다. 나머지는 얕은 사본입니다.