https://velog.io/@hyeri_hello/Java-3-%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4
처음부터 일반적인 원형을 만들어놓고 그것을 복사한 후 필요한 부분만 수정하여 사용하는 패턴
기존 객체를 복제함으로써 객체를 생성 한다.
재사용성: 프로토타입 패턴을 사용하면 기존 개체를 새 개체를 만들기 위한 청사진으로 재사용할 수 있으므로 시간과 각각의 새 객체를 생성하는 데 필요한 노력.
유연성: 패턴을 사용하면 런타임에 새 객체를 생성할 수 있으므로 응용 프로그램의 요구 사항에 따라 객체를 생성할 수 있는 유연성이 제공됩니다.
성능: 프로토타입을 복제하여 새 개체를 만드는 것이 처음부터 새 개체를 만드는 것보다 빠르고 효율적입니다. 특히 개체의 구조가 복잡한 경우에는 더욱 그렇습니다.
결합 감소: 프로토타입 패턴은 객체 자체의 실제 구현에서 객체 생성 프로세스를 분리하여 나머지 코드에 영향을 주지 않고 향후 객체 생성 방식을 쉽게 변경할 수 있습니다. .
추상화: 프로토타입 패턴은 객체 생성 프로세스를 추상화하여 코드를 이해하고 유지하기 쉽습니다.
/** Prototype Class **/
public class Cookie implements Cloneable {
public Object clone() {
try {
Cookie copy = (Cookie)super.clone();
//In an actual implementation of this pattern you might now change references to
//the expensive to produce parts from the copies that are held inside the prototype.
return copy;
}
catch(CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
}
/** Concrete Prototypes to clone **/
public class CoconutCookie extends Cookie { }
/** Client Class**/
public class CookieMachine {
private Cookie cookie;//could have been a private Cloneable cookie;
public CookieMachine(Cookie cookie) {
this.cookie = cookie;
}
public Cookie makeCookie() {
return (Cookie)cookie.clone();
}
public Object clone() { }
public static void main(String args[]) {
Cookie tempCookie = null;
Cookie prot = new CoconutCookie();
CookieMachine cm = new CookieMachine(prot);
for (int i=0; i<100; i++)
tempCookie = cm.makeCookie();
}
}