轉接器是什麼? 想必大家一定不陌生,來看張圖~
把插頭想像成是“既有的系統類別”,插座想像成“廠商或客戶需要的類別”
目前的系統類別無法直接給廠商客戶類別使用,這時 我們就需要轉接器(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中只支援物件轉接器,因為類別轉接器需要用到多重繼承.
當然,轉接的方式有很多種,這裡只是簡單的範例,其他的就靠各位去動動腦開發囉!~
沒有留言:
張貼留言