亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

web設計模式的適配器模式有什么用

發布時間:2022-01-13 21:14:58 來源:億速云 閱讀:126 作者:iii 欄目:大數據

本文小編為大家詳細介紹“web設計模式的適配器模式有什么用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“web設計模式的適配器模式有什么用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

意圖

將一個類的接口轉換成客戶希望的另外一個接口。 Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。

適配器這個名稱非常好,讀者可以考慮電源插頭轉換器,接下來我們會不斷地重復這個類比。

動機

有時,為復用而設計的工具箱類不能夠被復用的原因僅僅是因為它的接口與專業應用領域所需要的接口不匹配。

提供一個可以復用的類庫或者函數庫一般來講并不是一個很難的事情,難的是無法預知將來的使用方式,也就是說無法為將來準備接口。也就是說,當我們使用已有類庫的時候,接口一般都不會正好和我們的需求想匹配。

例如,有一個繪圖編輯器,這個編輯器允許用戶繪制和排列基本圖元(線、多邊型和正文等)生成圖片和圖表。這個繪圖編輯器的關鍵抽象是圖形對象。圖形對象有一個可編輯的形狀,并可以繪制自身。圖形對象的接口由一個稱為Shape的抽象類定義。繪圖編輯器為每一種圖形對象定義了一個Shape的子類:LineShape類對應于直線,PolygonShape類對應于多邊型,等等。

假設有要開發一個圖形編輯器,可以支持各種圖形的編輯。

像LineShape和PolygonShape這樣的基本幾何圖形的類比較容易實現,這是由于它們的繪圖和編輯功能本來就很有限。但是對于可以顯示和編輯正文的TextShape子類來說,實現相當困難,因為即使是基本的正文編輯也要涉及到復雜的屏幕刷新和緩沖區管理。同時,成品的用戶界面工具箱可能已經提供了一個復雜的TextView類用于顯示和編輯正文。理想的情況是我們可以復用這個 TextView類以實現TextShape類,但是工具箱的設計者當時并沒有考慮Shape的存在,因此TextView和Shape對象不能互換。

開發任何一個具有一定規模軟件,總會有些功能要在自己實現和使用已有代碼之間選擇。而這個選擇的結果一般受到幾個因素的影響:首先自己實現的難度,如實現比較簡單,一般都會選擇自己實現,雖然要花一點時間,但是程序員可以掌控一切。如果實現很困難,就會考慮使用現有類庫等。一般來說引用其他的庫就意味著編譯條件的復雜化,調試的復雜化等問題。理所當然,使用的類庫不會正好具有我們需要的接口。

一個應用可能會有一些類具有不同的接口并且這些接口互不兼容,在這樣的應用中象TextView這樣已經存在并且不相關的類如何協同工作呢?我們可以改變 TextView類使它兼容Shape類的接口,但前提是必須有這個工具箱的源代碼。然而即使我們得到了這些源代碼,修改TextView也是沒有什么意義的;因為不應該僅僅為了實現一個應用,工具箱就不得不采用一些與特定領域相關的接口。

當我們需要使用的類庫不具有我們希望的接口時應該怎么做呢?如果已有類庫是我們自己的代碼,就會有相當比例的開發者會選擇修改已有庫的接口以適用新用法。這并不是一個明智的做法:因為這會造成代碼的重復,不符合DRY(Don't Repeat Yourself)原則。

我們可以不用上面的方法,而定義一個TextShape類,由它來適配TextView的接口和Shape的接口。我們可以用兩種方法做這件事: 1) 繼承S h a p e類的接口和TextView的實現,或2) 將一個TextView實例作為TextShape的組成部分,并且使用TextView的接口實現TextShape。這兩種方法恰恰對應于Adapter模式的類和對象版本。我們將TextShape稱之為適配器Adapter。

推薦的方法是定義一個中間層,從接口的角度來講,它復合新軟件的架構需求,它就是一個新架構下的一個普通子類,具備所需的接口;從實現的角度來講,它使用已有類庫的功能,不需要從頭實現。這里使用已有庫的方法兩個:一個是IS A方式,即繼承的方式;另一個是HAS A方式機組合的方式。這兩種方式差不多使面向對象設計永遠的話題,目前的趨勢是使用組合的方式。但是無論哪種方式,都屬于適配器模式。

讀到這里,這篇“web設計模式的適配器模式有什么用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

web
AI

天祝| 乐都县| 宜城市| 大田县| 河曲县| 桐柏县| 从江县| 富源县| 铜川市| 扶余县| 恩施市| 明水县| 新郑市| 辽阳县| 新竹县| 中方县| 新乐市| 民乐县| 云安县| 新安县| 哈尔滨市| 航空| 巴东县| 云南省| 正宁县| 石棉县| 东阳市| 桂林市| 腾冲县| 达日县| 定西市| 宿松县| 永康市| 保定市| 宽甸| 安新县| 临洮县| 徐水县| 舟曲县| 哈巴河县| 荃湾区|