W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
想象你去國(guó)外旅行,一旦你意識(shí)到你的電源線插座與酒店房間墻上的插座不兼容時(shí),幸運(yùn)的是你記得帶你的電源適配器。它將一邊連接你的電源線插座另一邊連接墻壁插座,允許它們之間進(jìn)行通信。
同樣的情況也可能會(huì)出現(xiàn)在代碼中,當(dāng)兩個(gè) ( 或更多 ) 實(shí)例 ( 類(lèi)、模塊等 ) 想跟對(duì)方通信,但其通信協(xié)議 ( 例如,他們所使用的語(yǔ)言交流 ) 不同。在這種情況下,Adapter模式更方便。它會(huì)充當(dāng)翻譯,從一邊到另一邊。
# a fragment of 3-rd party grid component
class AwesomeGrid
constructor: (@datasource)->
@sort_order = 'ASC'
@sorter = new NullSorter # in this place we use NullObject pattern (another useful pattern)
setCustomSorter: (@customSorter) ->
@sorter = customSorter
sort: () ->
@datasource = @sorter.sort @datasource, @sort_order
# don't forget to change sort order
class NullSorter
sort: (data, order) -> # do nothing; it is just a stub
class RandomSorter
sort: (data)->
for i in [data.length-1..1] #let's shuffle the data a bit
j = Math.floor Math.random() * (i + 1)
[data[i], data[j]] = [data[j], data[i]]
return data
class RandomSorterAdapter
constructor: (@sorter) ->
sort: (data, order) ->
@sorter.sort data
agrid = new AwesomeGrid ['a','b','c','d','e','f']
agrid.setCustomSorter new RandomSorterAdapter(new RandomSorter)
agrid.sort() # sort data with custom sorter through adapter
當(dāng)你要組織兩個(gè)具有不同接口的對(duì)象之間的交互時(shí),適配器是有用的。它可以當(dāng)你使用第三方庫(kù)或者使用遺留代碼時(shí)使用。在任何情況下小心使用適配器:它可以是有用的,但它也可以導(dǎo)致設(shè)計(jì)錯(cuò)誤。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: