디자인 모드 20 - 원형 모드 [Prototype Pattern]

원형 모드
정의:
프로 토 타 입 인 스 턴 스 로 생 성 대상 의 종 류 를 지정 하고 이 프로 토 타 입 을 복사 하여 새로운 대상 을 만 듭 니 다.
예 를 들 어 (메 일 발송 사례):
public class Mail implements Cloneable{ 
    //   
    private String receiver; 
    //    
    private String subject; 
    //  
    private String appellation; 
    //    
    private String contxt; 
     //     ,      “XXX    ”   
    private String tail; 

    //    
    public Mail(AdvTemplate advTemplate){ 
         this.contxt = advTemplate.getAdvContext(); 
         this.subject = advTemplate.getAdvSubject(); 
    } 

    @Override
    public Mail clone(){ 
         Mail mail =null; 
         try { 
             mail = (Mail)super.clone(); 
         } catch (CloneNotSupportedException e) { 
             // TODO Auto-generated catch block
             e.printStackTrace(); 
         } 
         return mail; 
     } 

    //   getter/setter  
    public String getReceiver() { 
         return receiver; 
    } 

    public void setReceiver(String receiver) { 
         this.receiver = receiver; 
    } 

    public String getSubject() { 
         return subject; 
     } 
    public void setSubject(String subject) { 
         this.subject = subject; 
    } 
    public String getAppellation() { 
         return appellation; 
     } 
    public void setAppellation(String appellation) { 
         this.appellation = appellation; 
     } 
    public String getContxt() { 
         return contxt; 
     } 
    public void setContxt(String contxt) { 
         this.contxt = contxt; 
     } 
    public String getTail() { 
         return tail; 
     } 
    public void setTail(String tail) { 
         this.tail = tail; 
     } 
 } 

public class Client { 
    //       ,           
    private static int MAX_COUNT = 6; 

    public static void main(String[] args) { 
     //      
     int i=0; 
     //       ,         
     Mail mail = new Mail(new AdvTemplate()); 
     mail.setTail("XX      "); 
     while(i//            
 【    】------------->Mail cloneMail = mail.clone(); 
         cloneMail.setAppellation(getRandString(5)+"   (  )"); 
         cloneMail.setReceiver(getRandString(5) + "@" + getRandString(8)+".com"); 
         //      
         sendMail(cloneMail); 
             i++; 
         } 
     } 
} 

요약:
분석:
대상 을 복사 하여 새로운 대상 을 만 들 고 기 존 대상 과 마찬가지 로 세부 적 인 데 이 터 를 수정 합 니 다. 예 를 들 어 호칭 설정, 수신 자 주소 설정 등 입 니 다.이 는 new 키 워드 를 통 해 대상 을 만 들 지 않 고 대상 복사 로 이 루어 진다.대상 을 복사 할 때 클래스 의 구조 함 수 는 실행 되 지 않 습 니 다.Cloneable 을 실현 하고 clone 방법 을 다시 쓰 는 클래스 A, 하나의 무 참 구조 또는 유 참 구조 B 가 있 습 니 다. new 키 워드 를 통 해 대상 S 를 만 든 다음 에 S. clone () 방식 으로 새로운 대상 T 를 만 들 었 습 니 다. 그러면 대상 을 복사 할 때 구조 함수 B 는 실행 되 지 않 습 니 다. -클론 원리: Object 류 의 clone 방법의 원 리 는 메모리 에서 (구체 적 으로 말 하면 메모리 쌓 기) 바 이 너 리 스 트림 방식 으로 복사 하여 메모리 블록 을 재배 치 하 는 것 입 니 다. 그 구조 함수 가 실행 되 지 않 은 것 도 매우 정상 적 입 니 다.
- 사용 장면: 첫째, 초기 화 는 매우 많은 자원 을 소화 해 야 하 는데 이 자원 은 데이터, 하드웨어 자원 등 을 포함한다.둘째, new 를 통 해 하나의 대상 이 매우 번 거 로 운 데이터 준비 나 접근 권한 이 필요 하면 원형 모드 를 사용 할 수 있 습 니 다.셋째, 한 대상 이 다른 대상 에 게 접근 해 야 하고 각 호출 자가 그 값 을 수정 해 야 할 수도 있 으 므 로 원형 모드 로 여러 대상 을 복사 하여 호출 자 에 게 사용 하도록 고려 할 수 있다.실제 프로젝트 에서 원형 모델 은 단독 적 으로 나타 나 지 않 고 공장 방법 모델 과 함께 나타 나 며 clone 의 방법 으로 대상 을 만 든 다음 에 공장 방법 으로 호출 자 에 게 제공 합 니 다.

좋은 웹페이지 즐겨찾기