類圖
定義
將一個類的接口變換成客戶端期待的另一種接口,從而使原本因接口不匹配而無法一起工作的兩個類能夠一起工作
優點
- 適配器角色可以讓兩個沒有任何關係的類在一起運行
- 增加了類的透明性, target 目標角色具體實現委託給了源角色,這對高層模式是透明的
- 提高了類的複用度,源角色在原有系統中還是可以正常使用
- 靈活性非常好 適配器類似於一個靈活的構件,隨時可以卸載
使用場景
在開發階段不用考慮它,主要是在擴展應用中
擴展
對象適配器類圖如上圖所示,它與類適配器的區別是:類適配器是類間繼承,對象適配器是對象間的合成 ( 關聯 ) 關係。適配器模式是一個補償模式,通常用來解決接口不相容的問題
目標角色
public interface Target {
// 目標角色有自己的方法
void request();
}
目標角色實現類
public class ConcreteTarget implements Target {
@Override
public void request() {
System.out.println("目標角色 doSomething");
}
}
原角色
public class Adaptee {
// 原有的業務邏輯
public void doSomething() {
System.out.println("原角色 doSomething");
}
}
適配器角色
public class Adapter extends Adaptee implements Target {
@Override
public void request() {
super.doSomething();
}
}
場景類
public class Client {
public static void main(String[] args) {
// 原有的業務邏輯
Target target1 = new ConcreteTarget();
// 目標角色執行方法
target1.request();
// 增加了適配器角色後的業務邏輯
Target target2 = new Adapter();
// 目標角色執行方法,但是實際執行的是原角色的方法
target2.request();
//Adapter把Adaptee變成了Target,並且保持了原始的業務邏輯
}
}
運行結果
目標角色 doSomething
原角色 doSomething