概念與特點
概念:
調用不同對象的統一接口,如果是外部提供的名稱不相同的接口,就需要適配器來轉換。比如手機充電器的轉換頭,既可以充電安卓手機,也可以充電蘋果手手機。
特點:
- 客戶端通過適配器可以直接調用目標接口。
- 複用組件/類/庫。
- 將目標類和適配者類解耦,並解決接口不一致的問題。
結構與實現
代理模式包含目標接口,適配者類,適配器類。
目標接口:當前業務所期待的接口,可以是抽象類或接口。
適配者類:現存組件庫中的組件接口。
配適器類:轉換器,通過繼承或者或者引用配置者對象,把適配者接口轉換爲目標接口,讓客戶按目標者的格式訪問適配者。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
```javascript
let obj={
show:function () {
console.log('方法1')
}
};
let obj1={
show:function () {
console.log('方法2')
}
};
//1.調用統一的接口show
function map(fn) {
fn.show();
};
map(obj);
map(obj1);
//2.假設obj1對象是外部提供的對象,並且方法名不叫show,而叫display
obj1={
display:function () {
console.log('方法2')
}
};
//3.這時候就需要提供一個適配器接口
obj1.show = obj1.display();
//4.map方法可以不用任何改變
map(obj);
map(obj1);
```
應用場景
- 新開發的系統中需要用到老系統的方法/類/組件。
- 使用第三方的接口,接口定義與公司內部接口定義不同。
應用實例
暫無。
總結
適配器模式主要起到轉換 / 翻譯的作用。一方面用於現有的業務邏輯與以前相似,但是調用的方法名不同,或者有其他少許不同之處。另一方面用於在調用第三方接口時,如果第三方接口與內部接口約定不一致,則需要適配器來做轉換。