《大话设计模式》学习笔记13:适配器模式
篮球翻译示例:
1.Target:
public abstract class Player { protected string name; public Player(string name) { this.name = name; } public abstract void Attack(); public abstract void Defense(); }
2.具体球员类(以前锋为例):
public class Forwards:Player { public Forwards(string name):base(name) { } public override void Attack() { Console.WriteLine("前锋 {0} 进攻",name); } public override void Defense() { Console.WriteLine("前锋 {0} 防守", name); } }
3.Adaptee:
public class ForeignCenter { public string Name { get; set; }//故意用属性而不是构造方法来区别其他球员类 public void 进攻() { Console.WriteLine("外籍中锋 {0} 进攻", Name); } public void 防守() { Console.WriteLine("外籍中锋 {0} 防守", Name); } }
4.Adapter:
public class Translator:Player { private ForeignCenter foreignCenter = new ForeignCenter(); public Translator(string name):base(name) { foreignCenter.Name = name; } public override void Attack() { foreignCenter.进攻(); } public override void Defense() { foreignCenter.防守(); } }
5.客户端代码:
class Program { static void Main(string[] args) { Player battier = new Forwards("巴蒂尔"); battier.Attack(); Player yaoMing = new Translator("姚明"); yaoMing.Defense(); } }
系统的数据和行为都正确,但接口不符时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。
在GoF的设计模式中,适配器模式有两种类型即类适配器模式和对象适配器模式,类适配器模式通过多重继承对一个借口与另一个接口进行匹配,但C#、VB.NET、JAVA等语言都不支持多重继承,所以上面所讲的是对象适配器。
posted on 2015-05-17 17:08 Walden1024 阅读(481) 评论(2) 编辑 收藏 举报