-
[Design Pattern] 프로토타입(Prototype) 패턴 - 디자인 패턴CSE/Design Pattern 2015. 6. 13. 10:26
Pattern #3 프로토타입 패턴
런타임에 그 타입이 결정되는 거의 동일한 객체의 집합을 만들려고 할 때 적용.
가정- 프로토타입이 될 인스턴스르 이미 알고 있어야 한다.- 새로운 인스턴스가 필요할 때 언제든지 이를 클론화인스턴스 만드는 법- New Something();- MyPart anotherMyPart = MyPartPrototype.clone();동기A회사는 자사의 주력 제품인 "보고서 관리 Class Library"의 upgrade 프로젝트를 결정했으며, 그 개발 팀의 시스템 설계자로 당신이 선발되었다. upgrade는 주로 고객(library를 이용하는 개발자)의 불만사항을 해결하는데 초점이 맞추어져 있다.
- 보고서 관리 Class Library의 현재 상황개발자는 실제 보고서 객체(ReportA, ReportB,...) 를 직접 다루지 않고 모두 Report 객체로 간주하여 이용한다.=> 즉, 실제 보고서 객체는 외부에서 접근하지 못함.- 고객의 불만사항특정 Report 객체를 넘겨받아 이를 이용하여 작업을 수행하는데, 넘겨받은 Report 객체와 동일한 Report 객체를 생성해야 하는 경우에는 어떻게 해야 될지 의문.ex) 현재 Client에서 특정 Report 객체를 가지고 작업 중인데, 이 보고서의 복사본을 생성하기 위해서는 어떻게 해야 하는가??(Client는 이 객체가 어떤 타입인지 알 수 없다.)???에 들어갈 타입이 A인지, B, C 인지 알수 없다.- 해결 방안특정 객체를 복사해야 하는 경우, 객체 생성과 내용 복사기능을 해당 객체에 맡긴다.12345//clientCopyReport(Report *rep){Report *rep2 = rep->clone();}cs clone 함수는 실제 구체객체와 동일한 내용을 가지는 객체를 생성해서 반환하는 기능을 제공.- 특징1. Client에게 구체적 Report 객체로의 접근을 허용하지 않아도 된다.2. Client에서 모든 구체적 Report 객체를 알 필요가 없다.3. 새로운 구체적 Report 객체가 추가되더라도 기존 Client가 수정될 필요가 없다.4. clone함수 내에서 rep의 내용 복사 작업을 수행한다.다른 예제를 통해 프로토 타입 패턴에 대해 알아보자.Prototype.java12345678package prototype;public interface Prototype {public void setSize(int x);public void printSize();}cs A.java123456789101112131415161718192021222324package prototype;public class A implements Prototype, Cloneable {private int size;public A(int size) {this.size = size;}public void setSize(int x) {this.size = x;}public void printSize() {System.out.println("Size : " + size);}public A clone() throws CloneNotSupportedException {return (A) super.clone();}}cs ProtoMain.java123456789101112131415package prototype;public class ProtoMain {public static void main(String[] args) throws CloneNotSupportedException {A a = new A(1);for (int i = 2; i < 10; i++) {Prototype tmp = a.clone();tmp.setSize(i);tmp.printSize();}}}cs 'CSE > Design Pattern' 카테고리의 다른 글
[Design Pattern] 데코레이터(Decorator) 패턴 - 디자인 패턴 (0) 2015.06.13 [Design Pattern] 파써드(Facade) 패턴 (0) 2015.06.13 [Design Pattern] 빌더(Builder) 패턴 - 디자인 패턴 (0) 2015.06.13 [Design Pattern] 추상 팩토리(Abstract factory) 패턴 (0) 2015.06.13 [Design Pattern] 싱글톤(Singleton) 패턴 - 디자인 패턴 (0) 2015.06.13 [Design Pattern] 팩토리(factory) 패턴 - 디자인 패턴 (0) 2015.06.13