1. 程式人生 > >設計模式--結構型模式--介面卡模式

設計模式--結構型模式--介面卡模式

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