在 android 編程中,形形色色的 Adapter 到處可見,其複雜的設計讓人驚噓不已!
結合自己的親身體會,跟大家聊聊適配器這這種設計模式。
歡迎拍磚!
很形象的一個例子
現在你手頭上有一台筆記本,需要充電,不然最後一關搶寶藏的遊戲可能要泡湯了,怎麼辦?
很簡單,找個適配器充電唄!
於是乎,適配器找到了,電源是現成的,終於可以重新開戰了!
這個過程很簡單,但是蘊涵了今天所說的適配器(Adapter)。
試想一下,沒有適配器的話,你不可能把 220V 的電壓直接接在你心愛的筆記本上面吧?!
適配器,簡單來說就是整合已有的資源供別人使用的一個工具。
軟體實現
具體實現有兩中方式,使用繼承或者彙總(可以說是委派)。
Power.java
package mark.zhang;public class Power {public void supply() {System.out.println("power is suppling voltage......"); }}
IConvertor.java
package mark.zhang;public interface IConvertor {public abstract void convert();}
PC.java
package mark.zhang;public class PC {Adapter mAdapter;public void setAdapter(Adapter adapter) {mAdapter = adapter;mAdapter.convert();work();}public void work() {System.out.println("pc is working......");}}
接下來可以設計 Adapter
彙總的方式實現 Adapter.java
package mark.zhang;public class Adapter implements IConvertor {Power power;public Adapter() {power = new Power();}@Overridepublic void convert() {power.supply();}}
簡單的實現了 Power 適配器。
繼承的方式實現 Adapter.java
package mark.zhang;public class Adapter extends Power implements IConvertor {@Overridepublic void convert() {supply();}}
用戶端調用 Client.java
package mark.zhang;public class Client {public static void main(String[] args) {PC pc = new PC();Adapter a = new Adapter();pc.setAdapter(a);}}
可以看出,無論那種方式實現 Adapter,Adapter 都實現了介面方法,目的就是調用 Power 的 supply.
但是這種簡單的實現缺點還是很多的
比如,各個類設計過於具體(相對於抽象來說),程式沒有彈性,沒有面向抽象(或者介面)編程的思想。
還好,今天只是介紹一下 Adapter,複雜的實現,後面再說。