擴充卡模式其實很簡單,或者說學了設計模式到現在,雖然每次看到各種名字的設計模式就覺得很高端,但當真正了解過後才知道其實也沒有那麼玄乎,有的東西在我們平時的時候都已經用到過了。比如這次我們要說的擴充卡模式,說白了,就是以前的代碼接口,和我們用戶端需要調用的接口不一緻,但以前代碼功能又是我們想要的功能。這個時候我們不必去修改以前代碼的接口,我們隻需要新增加一個類的,這個類符合用戶端需要調用的接口,而在這個是适配類裡調用我們以前代碼的接口,這樣就能做到不修改以前代碼的接口,也不修改用戶端就能實作接口比對。

1 package day_26_adapter;
2
3 /**
4 * 用戶端期待通路的目标接口,或者是類
5 * @author turbo
6 *
7 * 2016年9月26日
8 */
9 public interface Target {
10 void request();
11 }
1 package day_26_adapter;
2
3 /**
4 * 需要适配的類
5 * @author turbo
6 *
7 * 2016年9月26日
8 */
9 public class Adaptee {
10 public void specificRequest(){
11 System.out.println("這是最終要用到的方法,或者需要适配的方法");
12 }
13 }
1 package day_26_adapter;
2
3 /**
4 * 擴充卡,适配需要被适配的接口或類,以此提供接口給用戶端
5 * @author turbo
6 *
7 * 2016年9月26日
8 */
9 public class Adapter implements Target {
10 private Adaptee adaptee = new Adaptee();
11
12 /* (non-Javadoc)
13 * @see day_26_adapter.Target#request()
14 */
15 @Override
16 public void request() {
17 adaptee.specificRequest();
18 }
19
20 }
1 package day_26_adapter;
2
3 /**
4 * 用戶端
5 * @author turbo
6 *
7 * 2016年9月26日
8 */
9 public class Client {
10 public static void main(String[] args){
11 Target target = new Adapter();
12 target.request();
13 }
14 }
擴充卡模式,并不是什麼很高端看不懂的模式,也很簡單。我們最後利用《大化設計模式》中的例子畫出UML圖(不再寫出代碼),一家籃球俱樂部裡有一名外籍籃球運動員,但是教練和外籍運動員語言不同,當然不能換教練更不能換運動員,這個時候就有一個翻譯在其中,翻譯者充當的就是适配類角色,我們用這實際的例子來看看UML類結構是怎樣的,以此來加深我們對擴充卡模式的了解。
不積跬步,無以至千裡;不積小流,無以成江海。