Adapter,將一個類(對象)的接口(方法或者屬性)轉化爲另外一個接口,以知足用戶需求,使類(對象)之間接口的不兼容問題經過適配器得以解決javascript
現實中咱們一個手機充電線 能夠用一個轉接頭去給各類手機充電css
1)須要適配的類Adaptee前端
2)適配器Adapter java
3)目標接口Target
優化
var obj = {
name: "你我貸",
job: "前端"
}
function Person() {
}
var person = new Person()
person.showInfo = function (name,job) {
console.log(name + ' is ' + name + ' and job is ' + job);
}
person.showInfo(obj.name,obj.job);
//你我貸 is 你我貸 and job is 前端
複製代碼
上面提到的適配器寫法只是表現了適配器是一個什麼樣的東西,但實際項目中不會出現這樣的代碼。咱們以jQuery中的一個API爲例,說說實際應用中的適配器模式的使用方法。ui
在jQuery樣式相關的API中,最方便使用的就是css()
了,這個接口是把set
和get
的功能合二爲一了:spa
// 既能夠像這樣調用,取得opacity值
$('.elem').css('opacity');
// 也能夠像這樣,設置opacity值
$('.elem').css({'opacity': '0.9'});複製代碼
適配器不會去改變實現層,那不屬於它的職責範圍,它干涉了抽象的過程。外部接口的適配可以讓同一個方法適用於多種系統。code
若是內部的實現出現了問題,須要動手術解決的話,那就不該該使用適配器了,由於那只是治標不治本的方法,反而會增長代碼的複雜度。對實現進行全面優化的帶來的是真正的改善。而若是實現層的問題不大,要解決一部分適配問題的話,適配器模式就是很好的選擇了。對象