티스토리 뷰
- Proxy Pattern? 초기에 메모리에 올리지 않다가 필요할 때만 메모리에 올림. 메모리 사용 시간을 조금씩 늦쳐서 사용자로 하여금 빠르게 작업할 수 있도록 해주는 역할. 즉, 객체화의 비용을 줄임으로써 초기 시스템의 부하를 줄여주며 조금씩 메모리에 로딩함으로 시스템 자원의 부하를 분산시키는 것을 추구하는 패턴.
Virtual Proxy
객체 생성에 많은 비용이 발생하는경우, 실제사용할때 객체가 생성되도록 대리자를 두어 접근하도록 제어한다.Remote Proxy
원격객체에 대한 로컬의 대리자 역활을 한다. Java RMI 를 통하거나 소켓통신을 통하여 원격객체에 데이터를 얻거나 메소드를 호출할 경우 대리자를 통하여 호출이 이루어진다.Protection Proxy
접근제어가 필요한 객체에 대한 접근을 통제하고 Proxy 객체를 통해 접근가능한 정도만 노출시킬때 사용한다.Smart Reference
실제객체에 접근할때 부가적인 기능을 수행하고자 할때 사용한다.
- 예제 11234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071class CAnswerReal{public:CAnswerReal(){}// 실제 구현 메소드string getAnswer(){try{Sleep(10 * 500);}catch(...){}string ans = "실제 데이터입니다.";return ans;}};class CAnswerProxy{public:CAnswerProxy(){mpRealData = NULL;mGoFlag = false;}~CAnswerProxy(){if( mpRealData != NULL )delete mpRealData;}private:bool mGoFlag;CAnswerReal* mpRealData;public:void action(){mGoFlag = true;}// Proxy 메소드string getAnswer(){if( mGoFlag && ( mpRealData == NULL ) )mpRealData = new CAnswerReal();if( mpRealData == NULL )return "질문에 대해 응답 중입니다";return mpRealData->getAnswer();}};void main(){CAnswerProxy* delay = new CAnswerProxy();printf("=== 질문입니다 ===\n");cout<<delay->getAnswer()<<endl;delay->action();cout<<delay->getAnswer()<<endl;delete delay;}
- 예제 212345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758class CSubject{public:virtual string getAnswer() = 0;};class CRealSubject : public CSubject{public:string getAnswer(){//TODO : DB처리등 시간이 오래 걸리는 작업을 실제 적용해야 하는 부분.Sleep(1000);return "실제 데이터입니다.";}};class CProxy : public CSubject{public:CProxy(){mpRealSub = NULL;}~CProxy(){if( mpRealSub )delete mpRealSub;}private:CRealSubject* mpRealSub;public:string getAnswer(){if( !mpRealSub ){mpRealSub = new CRealSubject();return "데이터 응답중입니다";}return mpRealSub->getAnswer();}};void main(){CSubject* data = new CProxy();cout<<data->getAnswer()<<endl;cout<<data->getAnswer()<<endl;delete data;}
cs
'Programming > Design Pattern' 카테고리의 다른 글
Singleton pattern (0) | 2015.01.25 |
---|---|
Template Method & Factory Method Pattern (0) | 2015.01.15 |
댓글