Walden1024

导航

《大话设计模式》学习笔记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  阅读(477)  评论(2编辑  收藏  举报