適配器模式
一、定義
將一個類的接口變換爲客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。
適配器模式又叫做變壓器模式,也叫做包裝模式(Wrapper)
適配器模式的類圖
Target是目標角色,該角色定義把其他類轉換爲何種接口,也就是我們的期望接口;Adaptee,是源角色是已經存在的、運行良好的類或對象,經過適配器角色的包裝,它會變成 Adapter適配器角色, Adapter是適配器角色,通過繼承或是類關聯的方式,把源角色轉換爲目標角色
適配器模式的通用類圖
-
目標角色
public interface Target { //目標角色有自己的方法 public void request(); }
-
目標角色的實現類
public class ConcreteTarget implements Target { public void request() { System.out.println("if you need any help,pls call me!"); } }
-
源角色
public class Adaptee { //原有的業務邏輯 public void doSomething(){ System.out.println("I'm kind of busy,leave me alone,pls!"); } }
-
適配器角色
public class Adapter extends Adaptee implements Target { public void request() { super.doSomething(); } }
-
場景類
public class Client { public static void main(String[] args) { //原有的業務邏輯 Target target = new ConcreteTarget(); target.request(); //現在增加了適配器角色後的業務邏輯 Target target2 = new Adapter(); target2.request(); } }
二、適配器模式的優點
-
適配器模式可以讓兩個沒有任何關係的類在一起運行
-
增加了類的透明性
我們訪問目標角色,但是具體的實現都委託給了源角色,而這些對高層次模塊是透明的
-
提高類的複用度
源角色在原有的系統中還是可以正常使用,而在目標角色中也可以充當新的演員
-
靈活性非常好
如果不想要適配器了,刪除掉這個適配器就可以了,其他的代碼都不用修改
三、適配器模式的使用場景
-
修改一個已經投產中的接口時
系統擴展了,需要使用一個已有或新建立的類,但這個類又不符合系統的接口時,使用適配器模式
注意:適配器模式最好在詳細設計階段不要考慮它,它不是爲了解決還處在開發階段的問題,而是解決正在服役的項目問題
項目一定要遵守依賴倒置原則和里氏替換原則,否則即使在適合使用適配器的場合下,也會帶來非常大的改造