디자인 모드 20 - 원형 모드 [Prototype Pattern]
6458 단어 #23 가지 디자인 모델
정의:
프로 토 타 입 인 스 턴 스 로 생 성 대상 의 종 류 를 지정 하고 이 프로 토 타 입 을 복사 하여 새로운 대상 을 만 듭 니 다.
예 를 들 어 (메 일 발송 사례):
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 의 방법 으로 대상 을 만 든 다음 에 공장 방법 으로 호출 자 에 게 제공 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.