介面卡模式(adapter)的定義如下:將乙個類的介面轉換成客戶希望的另外乙個介面,使得原本由於介面不相容而不能一起工作的那些類能一起工作。介面卡模式分為類結構型模式和物件結構型模式兩種,前者類之間的耦合度比後者高,且要求程式設計師了解現有元件庫中的相關元件的內部結構,所以應用相對較少些。
在現實生活中,經常出現兩個物件因介面不相容而不能在一起工作的例項,這時需要第三者進行適配。例如,講中文的人同講英文的人對話時需要乙個翻譯,用直流電的膝上型電腦接交流電源時需要乙個電源介面卡,用計算機訪問照相機的 sd 記憶體卡時需要乙個讀卡器等。在軟體設計中也可能出現:需要開發的具有某種業務功能的元件在現有的元件庫中已經存在,但它們與當前系統的介面規範不相容,如果重新開發這些元件成本又很高,這時用介面卡模式能很好地解決這些問題。
優點:
① 客戶端通過介面卡可以透明地呼叫目標介面。
② 復用了現存的類,程式設計師不需要修改原有**而重用現有的適配者類。
③ 將目標類和適配者類解耦,解決了目標類和適配者類介面不一致的問題。
④ 在很多業務場景中符合開閉原則。
缺點:
① 介面卡編寫過程需要結合業務場景全面考慮,可能會增加系統的複雜性。
② 增加**閱讀難度,降低**可讀性,過多使用介面卡會使系統**變得凌亂。
如下圖所示,client 想要使用 servicemethod 但是並不能直接使用需要將其轉換為 method 之後才能使用,這時我們寫乙個 adapter 關聯 service 並實現 client inte***ce,client 直接使用 client inte***ce 即可。實現時使用了構成原則:介面卡實現了其中乙個物件的介面,並對另乙個物件進行封裝。所有流行的程式語言都可以實現介面卡。
如下圖所示,client 想要使用 servicemethod 但是並不能直接使用需要將其轉換為 method 之後才能使用,這個時候我們就可以同時繼承 service 和 existing class 然後讓 client 關聯 existing class。service 就類似於 220v 的標準電壓,existing class 就類似於 5v 充電電壓,經過 adapter 將輸入的 220v 輸出為 5v。這一實現使用了繼承機制:介面卡同時繼承兩個物件的介面。請注意,這種方式僅能在支援多重繼承的程式語言中實現,例如 c++。
介面介面卡又稱預設介面卡:當不需要全部實現介面提供的方法時,可先設計乙個抽象類實現介面,並為該介面中每個方法提供乙個空實現,那麼該抽象類的子類可有選擇地覆蓋父類的某些方法來實現需求,即使用匿名內部類重寫需要使用的方法。適用於乙個介面不想使用其所有的方法的情況。
設計模式 結構型模式 介面卡模式
抽象成績操作類 目標介面 inte ce scoreoperation 快速排序類 適配者 class quicksort public void sort int array,int p,int r public intpartition int a,int p,int r swap a,j 1,...
設計模式 結構型模式 介面卡模式
已有介面a和b,在不修改a b的情況下,a要為b所用,這個時候需要乙個中間人來承擔將a的介面封裝成為b可以使用的介面,這裡的 中間人 就是介面卡 adapter 轉換介面 coyoteadapter將tomcat 的connector和container進行解耦,connector和containe...
設計模式 結構型模式 介面卡模式
將乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。角色說明 首先來說下物件介面卡模式的實現方式,就以電壓轉換為例子。現在我們需要定義乙個220v轉換成5v的介面 inte ce adapter被適配角色,一般是已存在的類,需要適配新的介面。生...