首頁  >  文章  >  Java  >  Java中關於適配器模式的圖文程式碼詳解

Java中關於適配器模式的圖文程式碼詳解

黄舟
黄舟原創
2017-07-24 15:29:051738瀏覽

這篇文章主要介紹了Java適配器模式,小編覺得蠻不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一.概念

適配器模式將一個介面轉換成客戶希望的另一個接口。它使得原來由於介面不相容而不能在一起工作的那些類別可以一起工作。

二.UML

三.更生動的範例




#去年買了一本本本,另外為本本配了羅技G1光電套。坑爹的是,光電套的滑鼠是USB接口,鍵盤是PS2接口,但我的本本卻沒有PS2接口啊。於是跑到市場,淘了一個轉接器。


於是乎,我抽象了這麼幾個類別。


1.PS2Port(PS2介面)。

2.USBPort(USB介面)。

3.PS2ToUSB(物件適配器),將PS2介面組裝成USB介面。

4.TestAdapter(測試類別),客戶端。

PS2Port  


package com.bjpowernode.adapter; 
 
/** 
 * PS2接口,圆口 
 * @author eason 
 * 
 */ 
public interface PS2Port { 
  public void workWithPS2(); 
}

 USBPort


package com.bjpowernode.adapter; 
 
/** 
 * USB接口,U口 
 * @author eason 
 * 
 */ 
public interface USBPort { 
  public void workWithUSB(); 
}

PS2ToUSB

package com.bjpowernode.adapter; 
 
/** 
 * 对象适配器 
 * 将PS2接口装换成USB接口 
 * 所以此类类型是USB接口(implements USBPort) + 成员变量ps2Port 
 * @author eason 
 * 
 */ 
public class PS2ToUSB implements USBPort{ 
 
  private PS2Port ps2Port; 
   
  public PS2ToUSB(PS2Port ps2Port) { 
    this.ps2Port = ps2Port; 
  } 
   
  @Override 
  public void workWithUSB() { 
    System.out.println("转换的关键在这里,本来是"); 
    ps2Port.workWithPS2(); 
    System.out.println("经过你的转换,现在是USB工作中"); 
  } 
   
}

TestAdapter

#
package com.bjpowernode.adapter; 
 
/** 
 * 测试类 
 * client 
 * @author eason 
 * 
 */ 
public class TestAdapter { 
 
  public static void main(String[] args) { 
    //我现在有一个PS2接口 
    PS2Port ps2Port = new PS2Port() { 
      @Override 
      public void workWithPS2() { 
        System.out.println("PS2工作中"); 
      } 
    }; 
     
    //但是我需要的是一个USB接口啊,对我(client)来说,我只认识USB接口 
    //经过PS2ToUSB的转换,PS2接口变成了USB接口 
    USBPort ps2ToUsbPort = new PS2ToUSB(ps2Port); 
     
    ps2ToUsbPort.workWithUSB(); 
     
  } 
 
}


五.物件的適配器和類別的適配器



上述的適配器就是物件適配器。再看看類別適配器。

PS2ToUSB,只是簡單模擬一下。因為java不允許多繼承,所以java沒有類別模式的程式碼,只有思想。


package com.bjpowernode.adapter; 
 
/** 
 * 类适配器 
 * @author eason 
 * 
 */ 
public class PS2ToUSB implements USBPort, PS2Port{ 
 
  //重写workWithUSB,把工作交给workWithPS2 
  @Override 
  public void workWithUSB() { 
    workWithPS2(); 
  } 
   
}

差異就是:物件適配器實作了客戶端想要的介面(USB),在內部有一個被適應物件(PS2)的引用,透過組合實現適配功能。類別適配器實作了客戶端想要的介面(USB)和被適配器介面(PS2),透過繼承來實現適配功能。


六.使用場景及使用感受

#1.希望復用一些現存的類,但是介面又與復用環境要求不一致。


2.其實適配器模式有點無奈之舉,在前期設計的時候,我們就不應該考慮適配器模式,而應該考慮透過重構統一介面。


七.適配器模式與裝飾者模式###############它們都可以用來包裝對象,本質差異在於# ########1.適配器模式:將一個介面轉換成另外一個介面。 #########2.裝飾者模式:不改變接口,只加入職責。 ###

以上是Java中關於適配器模式的圖文程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn