최상단 광고

2012년 4월 8일 일요일

프록시 패턴 (Proxy)


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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
class IObject
{
public:
    virtual void Use() = 0;
};
 
class CQuickSlot
{
    IObject *m_piObejct;
public:
    bool isExist()
    {
        return m_piObejct != NULL ? true : false;
    }
 
    void Use()
    {
        if(m_piObejct)
            m_piObejct->Use();
    }
};
 
class CQuickSlotProxy
{
    CQuickSlot *m_pcQuickSlot;
public:
    CQuickSlotProxy() : m_pcQuickSlot(NULL)
    {
 
    }
 
    ~CQuickSlotProxy()
    {
        if(m_pcQuickSlot)
            delete m_pcQuickSlot;
    }
 
    bool isExist()
    {
        if(m_pcQuickSlot)
            return m_pcQuickSlot->isExist();
 
        return false;
    }
 
    bool Use()
    {
        if(m_pcQuickSlot)
        {
            m_pcQuickSlot->Use();
            return true;
        }
 
        //bool형으로바뀌면서실제사용했는지여부를알수있게되었다.
        return false;
    }
};
void형에서 bool형으로 바뀐 use함수에서는 아이템 사용을 성공 여부를 알릴 수 있도록 기능이 확장되었으며, CQuickSlot 클래스에 변화를 가하지 않고도 기능 확장이 가능해졌습니다. 예를 들어, CQuickSlot의 Use함수 호출 횟수 계산 기능을 추가한다 했을 때에도 CQuickSlot 클래스를 변경할 필요 없게 되는 잇점이 생기게 되는 것이죠.

댓글 없음: