文章出處
文章列表
類的適配器模式 using System; /// 這里以插座和插頭的例子來詮釋適配器模式 /// 現在我們買的電器插頭是2個孔,但是我們買的插座只有3個孔的 /// 這是我們想把電器插在插座上的話就需要一個電適配器 namespace 設計模式之適配器模式 { /// <summary> /// 客戶端,客戶想要把2個孔的插頭 轉變成三個孔的插頭,這個轉變交給適配器就好 /// 既然適配器需要完成這個功能,所以它必須同時具體2個孔插頭和三個孔插頭的特征 /// </summary> class Client { static void Main(string[] args) { // 現在客戶端可以通過電適配要使用2個孔的插頭了 IThreeHole threehole = new PowerAdapter(); threehole.Request(); Console.ReadLine(); } } /// <summary> /// 三個孔的插頭,也就是適配器模式中的目標角色 /// </summary> public interface IThreeHole { void Request(); } /// <summary> /// 兩個孔的插頭,源角色——需要適配的類 /// </summary> public abstract class TwoHole { public void SpecificRequest() { Console.WriteLine("我是兩個孔的插頭"); } } /// <summary> /// 適配器類,接口要放在類的后面 /// 適配器類提供了三個孔插頭的行為,但其本質是調用兩個孔插頭的方法 /// </summary> public class PowerAdapter:TwoHole,IThreeHole { /// <summary> /// 實現三個孔插頭接口方法 /// </summary> public void Request() { // 調用兩個孔插頭方法 this.SpecificRequest(); } } }
對象的適配器模式 namespace 對象的適配器模式 { class Client { static void Main(string[] args) { // 現在客戶端可以通過電適配要使用2個孔的插頭了 ThreeHole threehole = new PowerAdapter(); threehole.Request(); Console.ReadLine(); } } /// <summary> /// 三個孔的插頭,也就是適配器模式中的目標(Target)角色 /// </summary> public class ThreeHole { // 客戶端需要的方法 public virtual void Request() { // 可以把一般實現放在這里 } } /// <summary> /// 兩個孔的插頭,源角色——需要適配的類 /// </summary> public class TwoHole { public void SpecificRequest() { Console.WriteLine("我是兩個孔的插頭"); } } /// <summary> /// 適配器類,這里適配器類沒有TwoHole類, /// 而是引用了TwoHole對象,所以是對象的適配器模式的實現 /// </summary> public class PowerAdapter : ThreeHole { // 引用兩個孔插頭的實例,從而將客戶端與TwoHole聯系起來 public TwoHole twoholeAdaptee = new TwoHole(); /// <summary> /// 實現三個孔插頭接口方法 /// </summary> public override void Request() { twoholeAdaptee.SpecificRequest(); } } }
在以下情況下可以考慮使用適配器模式:
- 系統需要復用現有類,而該類的接口不符合系統的需求
- 想要建立一個可重復使用的類,用于與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。
文章列表
全站熱搜