2019年3月29日 星期五

設計模式(7) 轉接器模式 (Adapter Pattern)

此篇介紹GoF設計模式(Design Pattern)的其中一種—轉接器模式 (Adapter Pattern)。


適用問題:

  試想我們的software system要跑新的vender class library,但這個新的vender卻與過往的vender有不一樣的interface,當然我們不想重構vender的程式碼,此時就可以使用轉接器模式的概念,建立Adapter做為中間者來處理兩邊的溝通,如此就不需要重寫system或vender的程式碼。


  其實就像插座與插頭不相合時,我們會透過使用轉接頭來連結一樣。

        client (三頭插頭) ---(request())--> adapter (轉接頭) ---(translatedRequest())--> Adaptee (兩頭插座)



轉接器模式定義:
  "The Adapter Pattern converts the interface of a class into another interface the
clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces." (轉接器模式將一個類別的介面轉換成客戶希望的另外一個介面,Adapter使得原本由於介面相容而不能一起工作的那些類別可以一起工作)


轉接器模式分兩種:
  1. Object Adapter:

  2. Class Adapter:使用多繼承 (所以在JAVA裡不能使用)

轉接器模式Code (C++):

class Target{
public:
    virtual void request(){
        cout<<"普通請求"<<endl;
    };
}

class Adapter : public Target{
private:
    Adaptee *adaptee;
public:
    Adapter(Adaptee* a){
        adaptee = a;
    }
    void request(){
        adaptee->specificRequest();
    }
}

class Adaptee{
public:
    void specificRequest(){
        cout<<"特殊請求"<<endl;
    }
}

void testTarget(Target *t){
    t->request();
}

int main(){
    Target myTarget;
    Adaptee myAdaptee;
    Adapter myAdapter(&myAdaptee);

    testTarget(&myTarget);
    testTarget(&myAdapter);
}




 參考資料:
    1. Head First Design Patterns
    2. 大話設計模式 (悅知文化出版)


沒有留言:

張貼留言