//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;
}