本文小編為大家詳細(xì)介紹“web設(shè)計(jì)模式的適配器模式有什么用”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“web設(shè)計(jì)模式的適配器模式有什么用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。
10年積累的網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有保定免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
意圖
將一個(gè)類(lèi)的接口轉(zhuǎn)換成客戶(hù)希望的另外一個(gè)接口。 Adapter模式使得原本由于接口不兼容而不能一起工作的那些類(lèi)可以一起工作。
適配器這個(gè)名稱(chēng)非常好,讀者可以考慮電源插頭轉(zhuǎn)換器,接下來(lái)我們會(huì)不斷地重復(fù)這個(gè)類(lèi)比。
動(dòng)機(jī)
有時(shí),為復(fù)用而設(shè)計(jì)的工具箱類(lèi)不能夠被復(fù)用的原因僅僅是因?yàn)樗慕涌谂c專(zhuān)業(yè)應(yīng)用領(lǐng)域所需要的接口不匹配。
提供一個(gè)可以復(fù)用的類(lèi)庫(kù)或者函數(shù)庫(kù)一般來(lái)講并不是一個(gè)很難的事情,難的是無(wú)法預(yù)知將來(lái)的使用方式,也就是說(shuō)無(wú)法為將來(lái)準(zhǔn)備接口。也就是說(shuō),當(dāng)我們使用已有類(lèi)庫(kù)的時(shí)候,接口一般都不會(huì)正好和我們的需求想匹配。
例如,有一個(gè)繪圖編輯器,這個(gè)編輯器允許用戶(hù)繪制和排列基本圖元(線、多邊型和正文等)生成圖片和圖表。這個(gè)繪圖編輯器的關(guān)鍵抽象是圖形對(duì)象。圖形對(duì)象有一個(gè)可編輯的形狀,并可以繪制自身。圖形對(duì)象的接口由一個(gè)稱(chēng)為Shape的抽象類(lèi)定義。繪圖編輯器為每一種圖形對(duì)象定義了一個(gè)Shape的子類(lèi):LineShape類(lèi)對(duì)應(yīng)于直線,PolygonShape類(lèi)對(duì)應(yīng)于多邊型,等等。
假設(shè)有要開(kāi)發(fā)一個(gè)圖形編輯器,可以支持各種圖形的編輯。
像LineShape和PolygonShape這樣的基本幾何圖形的類(lèi)比較容易實(shí)現(xiàn),這是由于它們的繪圖和編輯功能本來(lái)就很有限。但是對(duì)于可以顯示和編輯正文的TextShape子類(lèi)來(lái)說(shuō),實(shí)現(xiàn)相當(dāng)困難,因?yàn)榧词故腔镜恼木庉嬕惨婕暗綇?fù)雜的屏幕刷新和緩沖區(qū)管理。同時(shí),成品的用戶(hù)界面工具箱可能已經(jīng)提供了一個(gè)復(fù)雜的TextView類(lèi)用于顯示和編輯正文。理想的情況是我們可以復(fù)用這個(gè) TextView類(lèi)以實(shí)現(xiàn)TextShape類(lèi),但是工具箱的設(shè)計(jì)者當(dāng)時(shí)并沒(méi)有考慮Shape的存在,因此TextView和Shape對(duì)象不能互換。
開(kāi)發(fā)任何一個(gè)具有一定規(guī)模軟件,總會(huì)有些功能要在自己實(shí)現(xiàn)和使用已有代碼之間選擇。而這個(gè)選擇的結(jié)果一般受到幾個(gè)因素的影響:首先自己實(shí)現(xiàn)的難度,如實(shí)現(xiàn)比較簡(jiǎn)單,一般都會(huì)選擇自己實(shí)現(xiàn),雖然要花一點(diǎn)時(shí)間,但是程序員可以掌控一切。如果實(shí)現(xiàn)很困難,就會(huì)考慮使用現(xiàn)有類(lèi)庫(kù)等。一般來(lái)說(shuō)引用其他的庫(kù)就意味著編譯條件的復(fù)雜化,調(diào)試的復(fù)雜化等問(wèn)題。理所當(dāng)然,使用的類(lèi)庫(kù)不會(huì)正好具有我們需要的接口。
一個(gè)應(yīng)用可能會(huì)有一些類(lèi)具有不同的接口并且這些接口互不兼容,在這樣的應(yīng)用中象TextView這樣已經(jīng)存在并且不相關(guān)的類(lèi)如何協(xié)同工作呢?我們可以改變 TextView類(lèi)使它兼容Shape類(lèi)的接口,但前提是必須有這個(gè)工具箱的源代碼。然而即使我們得到了這些源代碼,修改TextView也是沒(méi)有什么意義的;因?yàn)椴粦?yīng)該僅僅為了實(shí)現(xiàn)一個(gè)應(yīng)用,工具箱就不得不采用一些與特定領(lǐng)域相關(guān)的接口。
當(dāng)我們需要使用的類(lèi)庫(kù)不具有我們希望的接口時(shí)應(yīng)該怎么做呢?如果已有類(lèi)庫(kù)是我們自己的代碼,就會(huì)有相當(dāng)比例的開(kāi)發(fā)者會(huì)選擇修改已有庫(kù)的接口以適用新用法。這并不是一個(gè)明智的做法:因?yàn)檫@會(huì)造成代碼的重復(fù),不符合DRY(Don't Repeat Yourself)原則。
我們可以不用上面的方法,而定義一個(gè)TextShape類(lèi),由它來(lái)適配TextView的接口和Shape的接口。我們可以用兩種方法做這件事: 1) 繼承S h a p e類(lèi)的接口和TextView的實(shí)現(xiàn),或2) 將一個(gè)TextView實(shí)例作為T(mén)extShape的組成部分,并且使用TextView的接口實(shí)現(xiàn)TextShape。這兩種方法恰恰對(duì)應(yīng)于Adapter模式的類(lèi)和對(duì)象版本。我們將TextShape稱(chēng)之為適配器Adapter。
推薦的方法是定義一個(gè)中間層,從接口的角度來(lái)講,它復(fù)合新軟件的架構(gòu)需求,它就是一個(gè)新架構(gòu)下的一個(gè)普通子類(lèi),具備所需的接口;從實(shí)現(xiàn)的角度來(lái)講,它使用已有類(lèi)庫(kù)的功能,不需要從頭實(shí)現(xiàn)。這里使用已有庫(kù)的方法兩個(gè):一個(gè)是IS A方式,即繼承的方式;另一個(gè)是HAS A方式機(jī)組合的方式。這兩種方式差不多使面向?qū)ο笤O(shè)計(jì)永遠(yuǎn)的話題,目前的趨勢(shì)是使用組合的方式。但是無(wú)論哪種方式,都屬于適配器模式。
讀到這里,這篇“web設(shè)計(jì)模式的適配器模式有什么用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
本文名稱(chēng):web設(shè)計(jì)模式的適配器模式有什么用
文章地址:http://chinadenli.net/article46/giseeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、商城網(wǎng)站、ChatGPT、網(wǎng)站建設(shè)、App開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)