網頁

2015年11月4日 星期三

[Design Pattern] 轉接器模式 Adapter Pattern

Adapter 轉接器

轉接器是什麼? 想必大家一定不陌生,來看張圖~



把插頭想像成是“既有的系統類別”,插座想像成“廠商或客戶需要的類別”

目前的系統類別無法直接給廠商客戶類別使用,這時 我們就需要轉接器(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();
        }
    }
}

------------------------------------------------------------------------------------------------------------------
客戶使用轉接器如下:
  1. 客戶透過目標介面呼叫轉接器方法,對轉接器發出要求.
  2. 轉接器透過被轉接者介面,呼叫被轉接者的一個或多個方法,將請求轉給被轉接者.
  3. 客戶接收到呼叫的結果,但未察覺這一切是透過一個轉接器居中聯繫.

------------------------------------------------------------------------------------------------------------------
轉接器分為 "物件轉接器" 跟 "類別轉接器"

但在java中只支援物件轉接器,因為類別轉接器需要用到多重繼承.

當然,轉接的方式有很多種,這裡只是簡單的範例,其他的就靠各位去動動腦開發囉!~


沒有留言:

張貼留言