//기본중의 기본렌즈 생성 즉, 모형 줌렌즈(원형개체) class ZoomLens { //렌즈의 수치 const int min_zoomlevel; const int max_zoomlevel; int zoomlevel; const int min_focus; const int max_focus; int focus; public: //왜 이렇게 생성자에서 인자들을 전달받아 다양하게 생성하는 이유는 이것이 원형패턴이기 때문이다. //단순히 일반화 관계를 사용하면 다양한 파생클래스가 필요하다. 여기는 원형패턴이니까 파생클래스가 필요없다. ZoomLens(int min_zoomlevel, int max_zoomlevel, int min_focus, int max_focus) : min_zoomlevel(min_zoomlevel), max_zoomlevel(max_zoomlevel), min_focus(min_focus), max_focus(max_focus) { zoomlevel=min_zoomlevel; focus=min_focus; } void Take() { cout <<"줌 레벨 가능 범위"<<min_zoomlevel << "~" << max_zoomlevel << endl; cout << "현재 줌레벨: " <<min_focus << "~"<< max_focus << endl; cout <<"현재 포커스 : "<<focus << endl; } int ZoomIn() { if(zoomlevel<max_zoomlevel) { zoomlevel++; } return zoomlevel; }
int ZoomOut() { if(zoomlevel>min_zoomlevel) { zoomlevel--; } return zoomlevel; }
int NearFocus() { if(focus>min_focus) { focus--; } return focus; } int FarFocus() { if(focus<max_focus) { focus++; } return focus; }
//모형 줌 렌즈를 갖고 소비자 요청에 맞게 복제된 렌즈를 생산하는 클래스 // class ProLine { ZoomLens *prototype; Lenses soldlenses; public: ProLine(TypeZoomLens typezoomlens) { switch(typezoomlens) { case NM_NM: prototype=new ZoomLens(20,70,1,100); break; case NM_NF: prototype=new ZoomLens(20,70,1,200); break; case NF_NF: prototype=new ZoomLens(20,300,1,200); break; case MF_NF: prototype=new ZoomLens(70,300,1,200); break; case MF_MF: prototype=new ZoomLens(70,300,10,200); break; } } ~ProLine() { DisposeLens(); delete prototype; }
//렌즈 주문 메서드(원형 렌즈를 복제한 렌즈 반환) //이떄 반환하는것은 생성자에서 인자로 받아 다양하게? 생성된 렌즈를 반환! //제품 생산요청이 들어오면 이 메서드를 활용 모형을 복제한 줌 렌즈를 반환한다! ZoomLens* MakeLens() { ZoomLens *product=prototype->Clone(); soldlenses.push_back(product); return product; } private: