你的位置:首页 > ASP.net教程

[ASP.net教程]《大话设计模式》学习笔记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等语言都不支持多重继承,所以上面所讲的是对象适配器。