所謂 適配器模式 就是用一個(gè)新的接口對(duì)現(xiàn)有的接口進(jìn)行包裝,處理類(lèi)與API的不匹配。使用這種模式的對(duì)象又叫作包裝器。
比如我們有一個(gè)接口:
function api (x1, x2, x3) { console.log(x1 + x2 + x3); // 用console.log來(lái)模擬接口的相關(guān)操作 }
然后我們有一個(gè)對(duì)象數(shù)據(jù):
var obj = { a: '我', b: '很', c: '帥' }
我們可以發(fā)現(xiàn),我們的數(shù)據(jù)和接口的參數(shù)是不匹配的,無(wú)法直接參入obj調(diào)用該api。
這時(shí)候怎么辦呢?我們可以定義一個(gè)適配器函數(shù):
function adapter (o) { // 通過(guò)適配器函數(shù)來(lái)調(diào)用目的api api(o.a, o.b, o.c); } adapter(obj); // 我很帥
這樣,通過(guò)適配器函數(shù) adapter() 我們就可以直接傳入obj來(lái)調(diào)用api了,類(lèi)與api的不匹配問(wèn)題就引刃而解了。
適配器模式就是用一個(gè)新的接口對(duì)現(xiàn)有的接口進(jìn)行包裝,處理類(lèi)與API的不匹配。使用這種模式的對(duì)象又叫作包裝器。
適用情況
使用一個(gè)已經(jīng)存在的對(duì)象,但其方法或?qū)傩越涌诓环衔覀兊囊蟆?/p>
想要?jiǎng)?chuàng)建一個(gè)可復(fù)用對(duì)象,該對(duì)象可以與其他不相關(guān)的對(duì)象或不可見(jiàn)的對(duì)象協(xié)同工作
想使用的對(duì)象已經(jīng)存在,但是不能對(duì)每一個(gè)都進(jìn)行原型繼承以匹配它的接口。對(duì)象適配器可以適配它的父對(duì)象接口方法或?qū)傩浴?/p>
與其他模式的區(qū)別
適配器和橋接器雖然類(lèi)似,但橋接的出發(fā)點(diǎn)不同,橋接的目的是將接口部分和實(shí)現(xiàn)部分分離,從而對(duì)他們可以更容易的更獨(dú)立的加以改變。
裝飾者模式增強(qiáng)了對(duì)象的功能而同時(shí)又不改變它的接口,因此它對(duì)程序的透明度比適配器要好。
代理模式再不改變它的接口條件下,為另一接口定義一個(gè)代理。
門(mén)面模式是為了簡(jiǎn)化一個(gè)接口,不提供額外額選擇。
適配器則要把一個(gè)接口轉(zhuǎn)換為另一個(gè)接口,并不會(huì)濾除某些能力也不會(huì)簡(jiǎn)化接口。
相關(guān)推薦:
JavaScript設(shè)計(jì)模式系列一:工廠模式
JavaScript設(shè)計(jì)模式系列三:建造者模式
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com