這篇文章主要介紹了Java適配器模式,小編覺得蠻不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
一.概念
適配器模式將一個介面轉換成客戶希望的另一個接口。它使得原來由於介面不相容而不能在一起工作的那些類別可以一起工作。
二.UML
#
三.更生動的範例
於是乎,我抽象了這麼幾個類別。
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),透過繼承來實現適配功能。
六.使用場景及使用感受
以上是Java中關於適配器模式的圖文程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!