티스토리 뷰

어떤 객체가 수행하는 기능을 그대로 수행하면서, 부가적인 기능을 수행하거나 기존 역할을 대행하기 위해 새 클래스를 정의하고, 새로 정의된 클래스를 통해서 외부와 통신하는 것을 프록시 패턴이라고 합니다.


class IObject { public: virtual void Use() = 0; }; class QuickSlot { IObject *m_piObejct; public: bool isExist() { return m_pObejct != NULL ? true : false; } void Use() { if(m_pObejct) m_pObejct->Use(); } }; class QuickSlotProxy { QuickSlot *m_pQuickSlot; public: QuickSlotProxy() : m_pQuickSlot(NULL) { } ~QuickSlotProxy() { if(m_pQuickSlot) delete m_pQuickSlot; } bool isExist() { if(m_pQuickSlot) return m_pQuickSlot->isExist(); return false; } bool Use() { if(m_pQuickSlot) { m_pQuickSlot->Use(); return true; } //bool형으로바뀌면서실제사용했는지여부를알수있게되었다. return false; } };

void형에서 bool형으로 바뀐 use함수에서는 아이템 사용을 성공 여부를 알릴 수 있도록 기능이 확장되었으며, QuickSlot 클래스에 변화를 가하지 않고도 기능 확장이 가능해졌습니다. 예를 들어, QuickSlot의 Use함수 호출 횟수 계산 기능을 추가한다 했을 때에도 QuickSlot 클래스를 변경할 필요 없게 되는 잇점이 생기게 되는 것이죠.

'Software Engineering > Design Pattern' 카테고리의 다른 글

커맨드 패턴 (Command)  (0) 2008.02.09
플라이웨이트 패턴 (Fly Weight)  (0) 2008.02.09
스트래티지 패턴 (Strategy)  (2) 2008.02.05
스테이트 패턴 (State)  (2) 2008.02.05
컴포지트 패턴 (Composite)  (0) 2008.02.05
댓글