디자인 모드 의 원형 모드 (클론 모드)

4092 단어 구조 사 여행
Prototype 디자인 모델 의 원형 모드
데모 주소
https://github.com/rocky123shine/RockyPrototype
콘 셉 트
원형 모델 은 복제 모델 이 라 고도 부른다.프로 토 타 입 인 스 턴 스 로 생 성 대상 의 종 류 를 지정 하고 이 프로 토 타 입 을 복사 하여 새로운 대상 을 만 듭 니 다.
클론
콘 셉 트
쉽게 말 하면 복 제 는 대상 A 를 통 해 B 에 게 1 부 를 복사 하 는 것 으로 B 가 A 의 속성 을 가지 기 위해 서 이다.클론 과 new 가 나 온 대상, 재 할당 의 차 이 는 클론 A 가 B 를 생 성 하 는 과정 에서 A 의 속성 을 B 에 게 직접 할당 한 것 이 고 new 가 나 온 것 은 B 가 초기 에 값 이 없 었 다 는 것 이다.
클론 의 사용 장면
개발 과정 에서 가끔 우 리 는 이런 수요 가 있다. 한 대상 A 는 어느 순간 에 A 에 일부 유효 치 를 포함 했다. 이때 A 와 똑 같은 새로운 대상 B 가 필요 할 수도 있 고 그 후에 B 에 대한 어떠한 변경 도 A 의 가치 에 영향 을 주지 않 는 다. 즉, A 와 B 는 두 개의 독립 된 대상 이지 만 B 의 초기 수 치 는 A 대상 에 의 해 확정 된다.자바 의 할당 이 이 루어 질 수 있다 고 말 하 는 사람 이 있 을 것 입 니 다. 쓸데없는 짓 으로 복 제 를 할 필요 가 있 습 니까?사실은 그렇지 않 습 니 다. 우리 가 할당 한 기본 데이터 형식 은 전혀 문제 가 없습니다. 복사 대상 에 비 기본 데이터 형식 이 있 으 면 할당 한 대상 과 기 존 대상 이 공동으로 비 기본 데이터 형식 이 있 는 메모리 공간 을 가리 킵 니 다.이때 복 제 된 대상 이 비 기본 데이터 형식 으로 바 뀌 면 기 존의 비 기본 데이터 형식 도 수정 된다. 이것 은 바로 우리 가 말 한 얕 은 복제 이다. 복제 대상 의 수정 내용 이 원래 내용 을 수정 하지 않 으 려 면 깊 은 복 제 를 실현 해 야 한다.
1. 얕 은 클론
복제 할 대상 에 대해 서 는 기본 데이터 형식의 속성 에 대해 서 는 새로 생 긴 대상 에 게 복사 하고, 비 기본 데이터 형식의 속성 에 대해 서 는 새로 생 긴 대상 에 게 만 참조 합 니 다. 즉, 새로 생 긴 대상 과 원시 대상 중의 비 기본 데이터 형식의 속성 은 모두 같은 대상 을 가리 키 고 있 습 니 다.
1.1 얕 은 복제 실현
1.1.1 자바. lang. Cloneable 인터페이스 1.1.2 구현 자바. lang. Object. clone () 재 작성 방법
//    
public class B implements Cloneable {   

    //       
    public Object clone() {   
        try {   
            return super.clone();   
        } catch (CloneNotSupportedException e) {   
            return null;   
        }   
    }   
}  

2. 딥 클론
얕 은 복 제 를 바탕 으로 복제 할 대상 중의 비 기본 데이터 형식의 속성 에 대응 하 는 클래스 에 대해 서도 복 제 를 실현 합 니 다. 이렇게 하면 비 기본 데이터 형식의 속성 에 대해 복 제 는 인용 이 아 닙 니 다. 즉, 새로 생 긴 대상 과 원시 대상 중의 비 기본 데이터 형식의 속성 은 같은 대상 이 아 닙 니 다.
2.1 딥 클론 실현
2.1.1 자바. lang. Cloneable 인터페이스 2.1.2 자바. lang. Object. clone () 재 작성 방법 실현
//    
public class B implements Cloneable {   
...
    //       
    public Object clone() {   
        try {   
            return super.clone();   
        } catch (CloneNotSupportedException e) {   
            return null;   
        }   
    }   
}  

//    
public class A implements Cloneable {   
...
 private B b;   
    //       
    public Object clone() {   
        try {   
            return super.clone();   
        } catch (CloneNotSupportedException e) {   
            return null;   
        }   
    }   
}  

좋은 웹페이지 즐겨찾기