轉接器是什麼? 想必大家一定不陌生,來看張圖~
把插頭想像成是“既有的系統類別”,插座想像成“廠商或客戶需要的類別”
目前的系統類別無法直接給廠商客戶類別使用,這時 我們就需要轉接器(Adapter).
------------------------------------------------------------------------------------------------------------------
我們來做一個Demo,讓大家更了解
目前有一個鴨子介面(請自行實作類別)
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) {
this.turkey = turkey;
}
// 實現介面中所有方法,調用Turkey的gobble()
@Override
public void quack() {
turkey.gobble();
}
// 實現介面中所有方法,調用Turkey的fly()
@Override
public void fly() {
// 因為火雞飛行距離很短,連續呼叫飛五次來完成
for (int i = 0; i < 5; i++) {
turkey.fly();
}
}
}
------------------------------------------------------------------------------------------------------------------
客戶使用轉接器如下:
- 客戶透過目標介面呼叫轉接器方法,對轉接器發出要求.
- 轉接器透過被轉接者介面,呼叫被轉接者的一個或多個方法,將請求轉給被轉接者.
- 客戶接收到呼叫的結果,但未察覺這一切是透過一個轉接器居中聯繫.
------------------------------------------------------------------------------------------------------------------
轉接器分為 "物件轉接器" 跟 "類別轉接器"
但在java中只支援物件轉接器,因為類別轉接器需要用到多重繼承.
當然,轉接的方式有很多種,這裡只是簡單的範例,其他的就靠各位去動動腦開發囉!~

沒有留言:
張貼留言