適配器模式
適配器模式屬於結構型模式,又叫包裝模式
定義:把一個類的接口變換成客戶端所期待的另一種接口,從而使原本接口不匹配而無法一起工作的兩個類能夠在一起工作
在現有的系統中有新舊兩個接口,由於新舊接口不兼容導致客戶端調用出現問題,但是現有系統還需要使用舊的接口,所以這個接口不能重構,但是爲了能夠讓客戶端正常調用,我們就需要將新的接口轉換成舊的接口,這種解決方式就是適配器模式
模式類圖
角色:
- 目標接口:Target,該角色把其他類轉換爲我們期望的接口
- 被適配類:Adaptee,被期望改變的接口
- 適配器:adapter,將被適配類Adaptee和目標接口Target接口組合到一起
優點
- 適配器模式可以讓兩個沒有任何關係的類在一起運行
- 增加了類的透明性和複用性
- 靈活性非常好
適配器模式是爲了在擴展應用的時候減少代碼時才使用的,所以最初設計系統時不要考慮使用適配器模式
模式代碼實現
目標接口
Target,我們期望的接口模樣,供客戶端調用
public interface Target {
/**
* 客戶端訪問的目標接口
*/
void request();
}
被適配類
Adaptee的adapterMethod方法是我們期望被適配的方法
public class Adaptee {
/**
* 被適配的接口
*/
public void adapterMethod(){
System.out.println("我是要被適配的方法");
};
}
適配器
Adapter,將被適配類Adaptee和目標接口Target接口組合到一起
public class Adapter implements Target {
/**
* 被適配類
*/
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void request() {
adaptee.adapterMethod();
}
}
測試
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
Adapter adapter = new Adapter(adaptee);
adapter.request();
}
輸出
我是要被適配的方法
參考:設計模式之禪:https://www.kancloud.cn/sstd521/design/193573