設計模式--結構型模式--介面卡模式
//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; }