GOF23設計模式之適配器模式(Adapter)

1、適配器模式概述

  將一個類的接口轉換成客戶可用的另一個接口。測試

  將本來不兼容不能在一塊兒工做的類添加適配處理類,使其能夠在一塊兒工做。this

2、適配器模式場景

  要想只有USB接口的電腦想使用PS/2接口的鍵盤,必須使用PS/2轉USB的適配器。spa

3、適配器模式示例

  (1)定義USB接口code

 1 /**
 2  * 客戶所期待的接口(至關於USB接口)
 3  * @author CL
 4  *
 5  */
 6 public interface Target {
 7     
 8     void handleReq();
 9 
10 }

  (2)定義PS/2鍵盤對象

 1 /**
 2  * 被適配的類 (至關於例子中的PS/2鍵盤)
 3  * @author CL
 4  *
 5  */
 6 public class Adaptee {
 7     
 8     public void request() {
 9         System.out.println("我是PS/2接口的鍵盤!");
10     }
11 
12 }

  (3)定義PS/2轉USB的適配器blog

  a. 類適配器接口

 1 /**
 2  * 適配器(至關於能夠將PS/2接口轉換成USB接口的適配器自己)
 3  *     類適配器方式
 4  * @author CL
 5  *
 6  */
 7 public class Adapter extends Adaptee implements Target {
 8 
 9     public void handleReq() {
10         super.request();
11     }
12 
13 }

  測試:get

 1 /**
 2  * 客戶端類(至關於只能識別USB接口鍵盤的電腦)
 3  * @author CL
 4  *
 5  */
 6 public class Client {
 7     
 8     public void test(Target t) {
 9         t.handleReq();
10     }
11     
12     public static void main(String[] args) {
13         Client c = new Client();
14         Adaptee a = new Adaptee();
15         
16         Target t = new Adapter();    //類適配器方式
17         
18         c.test(t);
19     }
20 
21 }

  控制檯輸出:class

我是PS/2接口的鍵盤!

  b.對象適配器test

 1 /**
 2  * 適配器(至關於能夠將PS/2接口轉換成USB接口的適配器自己)
 3  *         對象適配器方式,使用了組合的方式跟被適配對象整合
 4  * @author CL
 5  *
 6  */
 7 public class Adapter implements Target {
 8     
 9     private Adaptee adaptee;
10     
11     public Adapter(Adaptee adaptee) {
12         this.adaptee = adaptee;
13     }
14 
15     public void handleReq() {
16         adaptee.request();
17     }
18 
19 }

  測試:

 1 /**
 2  * 客戶端類(至關於只能識別USB接口鍵盤的電腦)
 3  * @author CL
 4  *
 5  */
 6 public class Client {
 7     
 8     public void test(Target t) {
 9         t.handleReq();
10     }
11     
12     public static void main(String[] args) {
13         Client c = new Client();
14         Adaptee a = new Adaptee();
15         
16         Target t = new Adapter3();    //類適配器方式
17         
18         c.test(t);
19     }
20 
21 }

  控制檯輸出:

我是PS/2接口的鍵盤!
相關文章
相關標籤/搜索