设计模式--结构型模式--适配器模式

//Structural Patterns--Adapter
//结构型模式--适配器模式

//Target(目标接口):所期望得到的接口
//Adaptee(适配者):需要适配的类
//Adapter(适配器):该模式的核心,具有将 Adaptee 包装为 Target 的职责
//--------------------------------------------------------------
class Deque    //双端队列,Adaptee适配者
{
public:
    void push_back(int x){cout << "Deque push_back : " << x << endl;}
    void push_front(int x){cout << "Deque push_front : " << x << endl;}

    void pop_back(){cout << "Deque pop_back" << endl;}
    void pop_front(){cout << "Deque pop_front" << endl;}
};
//--------------------------------------------------------------
class Sequence    //顺序类,Target目标接口
{
public:
    virtual void push(int x) = 0;
    virtual void pop() = 0;
}; 

#if x    //类适配器(多继承方式)
//--------------------------------------------------------------
class Stack : public Sequence , private Deque //栈,Adapter适配器
{
public:
    void push(int x){push_back(x);}
    void pop(){pop_back();}
};

class Queue : public Sequence , private Deque    //队列,Adapter适配器
{
public:
    void push(int x){push_back(x);}
    void pop(){pop_front();}
};
#else    //对象适配器(对象组合方式)
//--------------------------------------------------------------
class Stack : public Sequence
{
public:
    void push(int x){dq.push_back(x);}
    void pop(){dq.pop_back();}
private:
    Deque dq;
};

class Queue : public Sequence
{
public:
    void push(int x){dq.push_back(x);}
    void pop(){dq.pop_front();}
private:
    Deque dq;
};
#endif

//--------------------------------------------------------------
//测试
void dpAdpterTestMain()
{
    Sequence *st = new Stack();
    Sequence *qu = new Queue();

    st->push(1);
    st->pop();

    qu->push(1);
    qu->pop();

    if(st) {delete st;st= NULL;}
    if(qu) {delete qu;qu= NULL;}
    return;
}

猜你喜欢

转载自blog.csdn.net/hhgfg1980/article/details/82943332