- 轉接器,其實很常見的一個概念,ps/2 to usb , COM to usb ...etc,但可以訂出真正定義為將一個類別的介面,轉換成另一個介面以供客戶使用,轉接器讓原本介面不相容的類別可以合作無間。
- Class Diagram
[caption id="attachment_168" align="alignnone" width="600" caption="AdapterPattern"]
- 模擬情境
鴨子與火雞的故事,假設平常都是鴨子在表演,有一天發現鴨子不夠了,想利用火雞來魚目混珠,顯而易見的,必須讓火雞學會一些鴨子的技能,如此才能混人耳目。
public interface Duck{
public void quack();
public void fly();
}
public interface Turkey{
public void gobble();
public void fly();
}
撰寫轉接器的主要步驟大概有以下這幾點:
public class TurkeyAdapter implements Duck{
//實作想要轉換的型態,也就是客戶想要看到的介面,以這故事為例,我可能需要一個火雞轉接器來實作鴨子
Turkey turkey;
public TurkeyAdapter(Turkey turkey){
//取得被轉換者的物件實體參考,在本例子當中適用constructor
this.turkey = turkey;
}
public void quack(){
turkey.gobble();
//需要實作類別中所有的方法,quack()在類別之間的轉變就相當簡單,直接呼叫gobble()即可
}
public void fly(){
for loop - turkey.fly();
//雖然兩個介面都有fly方法,但火雞自己多飛幾次使得他的飛行距離看起來更像鴨子
}
}
- 對於轉接器使用的過程如下:
- 客戶端透過目標介面(鴨子)呼叫轉接器的方法,對轉接器發出要求。
- 轉接器透過被轉接者介面,呼叫被轉接者的一個或多個方法,將請求轉給被轉接者。
- 客戶接收到呼叫的結果,但並未察覺這一切是透過一個轉接器居中聯繫。
- 常見的轉接器 - Collection with Vector , Stack , Hashtable and the newly Iterator
對於轉接器模式有兩種,一種是 Object Adapter,另一種是Class Adapter,但Class Adapter需要有多重繼承的支援才可進行,所以在Java Solution當中是看不到的,而多重繼承的結果,也使得轉接器很方便的直接叫用被轉接者的method使用了。
沒有留言:
張貼留言