適用問題:
試想我們的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. 大話設計模式 (悅知文化出版)
沒有留言:
張貼留言