C#设计模式之六适配器模式(Adapter Pattern)【结构型】
一、引言 ?? 对象适配器使用的是对象组合的方案,它的Adapter核Adaptee的关系是组合关系。 ?? OO中优先使用组合模式,组合模式不适用再考虑继承。因为组合模式更加松耦合,而继承是紧耦合的,父类的任何改动都要导致子类的改动。 2】、-类适配器 ????? ? ???????? 2.4、模式的组成 ????? 可以看出,在适配器模式的结构图有以下角色: ????? (1)、目标角色(Target):定义Client使用的与特定领域相关的接口。 ? ? ??? ? (2)、客户角色(Client):与符合Target接口的对象协同。 ? ????? (3)、被适配角色(Adaptee):定义一个已经存在并已经使用的接口,这个接口需要适配。 ? ????? (4)、适配器角色(Adapte) :适配器模式的核心。它将对被适配Adaptee角色已有的接口转换为目标角色Target匹配的接口。对Adaptee的接口与Target接口进行适配. 2.5 适配器模式的具体实现 ?? 由于适配器模式有两种实现结构,今天我们针对每种都实现了自己的方式。 ?? 1、对象的是适配器模式实现 1 namespace 对象的适配器模式 2 { 3 ///<summary> 4 ///家里只有两个孔的插座,也懒得买插线板了,还要花钱,但是我的手机是一个有3个小柱子的插头,明显直接搞不定,那就适配吧 5 </summary> 6 class Client 7 { 8 static void Main(string[] args) 9 { 10 //好了,现在就可以给手机充电了 11 TwoHoleTarget homeTwoHole = new ThreeToTwoAdapter(); 12 homeTwoHole.Request(); 13 Console.ReadLine(); 14 } 15 } 16 17 /// 18 我家只有2个孔的插座,也就是适配器模式中的目标(Target)角色,这里可以写成抽象类或者接口 19 20 public TwoHoleTarget 21 22 客户端需要的方法 23 virtual void Request() 24 25 Console.WriteLine("两孔的充电器可以使用"); 26 27 28 29 30 手机充电器是有3个柱子的插头,源角色——需要适配的类(Adaptee) 31 32 ThreeHoleAdaptee 33 34 SpecificRequest() 35 36 Console.WriteLine(我是3个孔的插头也可以使用了37 38 39 40 41 适配器类,TwoHole这个对象写成接口或者抽象类更好,面向接口编程嘛 42 43 ThreeToTwoAdapter : TwoHoleTarget 44 45 引用两个孔插头的实例,从而将客户端与TwoHole联系起来 46 private ThreeHoleAdaptee threeHoleAdaptee = ThreeHoleAdaptee(); 47 这里可以继续增加适配的对象。。 48 49 50 实现2个孔插头接口方法 51 52 override 53 54 可以做具体的转换工作 55 threeHoleAdaptee.SpecificRequest(); 56 57 58 59 }
设计模式之适配器模式 这里手机充电器为例,我们的家的插座是两相电的,但是手机的插座接头是三相电的 好了,现在可以充电了 11 ITwoHoleTarget change = change.Request(); 16 我家只有2个孔的插座,也就是适配器模式中的目标角色(Target),这里只能是接口,也是类适配器的限制 interface ITwoHoleTarget Request(); 23 24 25 26 3个孔的插头,源角色——需要适配的类(Adaptee) 27 28 abstract 29 30 31 32 Console.WriteLine(我是三个孔的插头34 35 36 37 适配器类,接口要放在类的后面,在此无法适配更多的对象,这是类适配器的不足 38 39 ThreeToTwoAdapter:ThreeHoleAdaptee,ITwoHoleTarget 40 41 42 43 44 45 46 调用3个孔插头方法 47 this.SpecificRequest(); 48 49 50 } ?? 代码都很简答,谁都可以看得懂,也有详细的备注。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |