Skip to main content

Adapter Pattern

Introduction

舉例來說,今天有一家廠商開發數位電視A,並有且對應的API可以讓使用者去操縱

於是就有一家廠商根據這個API開發了對應的遙控器B。

test.png

這時候一切都很正常work,但是不久之後,該廠商又開發了一台更新型的電視C,

這時候提供的API卻跟原來的完全不一樣,這時候原本的遙控器就完全沒有辦法去操控這台新的電視C

這時候解決方法如下

  • 重新製作一個新的遙控器,然後這個新的遙控器可以支援新舊兩款電視。
  • 對新的電視B製造一個轉接器,能夠再新舊API運作,使得舊有的遙控器能夠順利使用。

test.png

如果重新製作一個遙控器,每次有新的API出現,就要重新改寫遙控器,此外在維護上面也複雜。

因此這邊採用轉接器的方式製作。

test.png

再智慧電視B的前面多一層轉接器,這轉接器提供舊有一致的API給搖控器使用,底層使用新的API與電視B溝通,如此一來 遙控器本身依然可以正常運作的去操控新舊兩款電視。

Example


//television A

public class TelevisionA implements Television{
public old_control{ .... }
....
}

//television C
public class TelevisionB{
public new_control{ ...}
....
}

//television adapter
public class TVBdapter implements Television{
TelevisionB tb;
public old_control{ tb.new_control() ....}
...
}
//controller
public class controller{
televisionList = {TelevisionA, TVBdapter };
for(Television tv : televisionList){
tv.old_control(...)
}
....
}