from now on,let us begin design patterns。
介面卡模式
通用類圖:
角色說明:
1. target目標角色:定義期望的介面
2. adaptee源角色:待轉換的源角色
3. adapter介面卡角色:通過繼承或是類關聯的方式,將源角色轉換為目標角色
關鍵點:介面卡類繼承原有的類,獲得父類中需要被適配的方法,實現目標介面,實現的時候呼叫原有類中的方法。僅此而已,沒什麼。還有一種就是兩者都是介面,我們可以使用關聯關係。
目的:不修改原有的**,解耦
介面卡通用**:
需要修改乙個已經投產中的介面時,介面卡模式可能是最適合的模式。比如:系統擴充套件了,需要使用乙個已有或新建立的類,但這個類又不符合系統的介面。
想要建立乙個可以重用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作
兩個類所做的事情相同或相似,但是具有不同介面的時候
舊的系統開發的類已經實現了一些功能,但是客戶端卻只能以另外介面的形式訪問,但我們不希望手動更改原有類的時候
使用第三方元件,元件介面定義和自己定義的不同,不希望修改自己的介面,但是要使用第三方元件介面的功能
最好不要在「詳細設計階段」考慮它,它不是為解決還處在「開發階段的問題」,而是解決「正在服役的問題」。其主要場景是擴充套件應用
還要遵守依賴倒置原則和黎克特制替換原則,否則也會帶來大面積的修改
我們舉乙個火雞變鳳凰的例子:
類圖:
鳳凰介面和火鳳凰的實現:期望的目標類
火雞介面和野火雞的實現:需要被適配的類
我們將火雞變成鳳凰:介面卡
火雞要變鳳凰啦:
執行結果:
testphoenix方法只認鳳凰,但是它沒想到乙隻冒充鳳凰的火雞混入其中,也裝模作樣地像鳳凰一樣叫和飛。
介面卡模式充滿著良好的oo設計原則:使用物件組合,已修改的介面包裝被適配者。另外的優點是被適配者的子類,都可以搭配介面卡使用。
當我們維護別人寫的**的時候:最後的辦法不是去修改別人的方法名或者方法體,而是使用這個模式將其適配成我們需要的方法名或者體,這裡返回的實體是改變的,而裝飾者模式返回的實體是不變的。
介面卡模式在實踐中的使用場合:想使用乙個已存在的類,但是如果它的方法和你的要求不同時,而你又不想更改客戶端的**時,可以考慮使用介面卡。比如:公司在設計乙個系統考慮使用第三方開發元件,而這個元件的介面和我們自己的系統介面不同,而我們也沒必要為了迎合它而改變自己的介面,就可以考慮使用介面卡模式來解決問題。
設計模式09 介面卡模式
將乙個類的介面轉換成客戶希望的另乙個介面,使得原本因介面不相容而不能一起工作的 那些類可以一起工作。比如 stl 中乙個演算法需要兩個引數,但呼叫時需要乙個引數,中間就需要乙個介面卡去把兩個引數的演算法適配成乙個引數的。例如,for each 這裡呼叫時是只有乙個引數的,如果我們函式物件過載的括號運...
設計模式入門 介面卡模式
配器模式將乙個類的介面適配成使用者所期待的 場景 現在手機的資料介面有兩種type c和micro usb,加入你現在有乙個micro usb的資料線,想給乙個type c介面的手機充電或者傳輸資料,這時你就需要乙個介面卡了 方式這裡介紹兩種介面卡設計方式 設計 物件介面卡 類介面卡 實現 公共 目...
設計模式入門 介面卡模式
歐洲的插座和美式的介面不同,買了美式的電腦,如何在歐洲使用,這就需要乙個介面卡。不改變原來物件的介面,而實現想轉換成的型別的介面。以鴨子為例,現在有乙隻火雞也想接收針對鴨子的請求。鴨子介面 public inte ce duck 綠頭鴨是鴨子的子類 public class mallardduck ...