介面卡結構圖:
target(目標介面)
可以是介面或抽象類,由於c#不支援多類繼承,因此把target定義為介面
adaptee(需要適配的類介面)
不滿足當前條件,需要轉化的類
adapter(介面卡)
負責adaptee的介面與target介面進行適配
優點:
通過介面卡,客戶端可以呼叫同一介面,因而對客戶端來說是透明的。這樣做更簡單、更直接、更緊湊。
復用了現存的類,解決了現存類和復用環境要求不一致的問題。
將目標類和適配者類解耦,通過引入乙個介面卡類重用現有的適配者類,而無需修改原有**。
乙個物件介面卡可以把多個不同的適配者類適配到同乙個目標,也就是說,同乙個介面卡可以把適配者類和它的子類都適配到目標介面。
缺點:
對於物件介面卡來說,更換介面卡的實現過程比較複雜
介面卡模式適用情形:
當適用乙個已存在的類,而它的介面不符合所要求的情況;
想要建立乙個可以復用的類,該類可以與原介面的類協調工作;
在物件適配中,當要匹配數個子類的時候,物件介面卡可以適配它們的父類介面。
類的介面卡模式:
//target(目標介面) 需要的電壓
public inte***ce america_dian
//adaptee(需要適配的類介面) 現有的電壓
public class china_dian
}//adapter(介面卡) 110v電壓變為220v電壓
public class transform_dian:china_dian,america_dian
debug.log("沒有電壓成功,這回好了,機器燒了");
return tempdianv;}}
public class importedmachine}}
public void start()
物件介面卡:
//target(目標介面) 需要的電壓
public inte***ce america_dian
//adaptee(需要適配的類介面) 現有的電壓
public class china_dian
}//adapter(介面卡) 110v電壓變為220v電壓
//不用繼承而是委派
public class transform_dian:america_dian
public int dian_110()
debug.log("沒有電壓成功,這回好了,機器燒了");
return tempdianv;}}
public class importedmachine}}
public void start()
物件介面卡和類介面卡其實算是同一種思想,只不過實現方式不同。
根據合成復用原則,組合大於繼承,
所以它解決了類介面卡必須繼承adaptee的侷限性問題,也不再強求target必須是介面。
同樣的它使用成本更低,更靈活
介面介面卡:
//不同電器,電機所需電壓不同
public inte***ce dianya
//介面卡 抽象類實現介面,而在抽象類中所有的方法都進行置空
public abstract class adapter:dianya
public int output10v()
public int output15v()
public int output20v()
}//本類根據需要,從繼承的抽象類中,選擇性的實現自己需要的方法
public class phone:adapter
debug.log("變壓失敗,這回好了,手機燒了");
return tempoutputv;}}
public class computer:adapter
debug.log("變壓失敗,這回好了,電腦燒了");
return tempoutputv;}}
public void start()
參考: 設計模式8 介面卡模式
定義 將乙個類的介面變換成客戶端所期待的另乙個介面,從而使原本因介面不匹配而無法在一起工作的兩個類可以在一起工作。target目標角色 定義把其他型別轉換為何種介面,也就是我們的期望介面。adaptee源角色 已經存在的執行良好的類或物件。adapter介面卡角色 把源角色轉換為目標角色。上圖是類介...
設計模式 介面卡模式 類介面卡 物件介面卡
乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...
設計模式之介面卡模式(類介面卡模式)
介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...