适配器模式


适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。

在软件开发中,也就是系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况,比如在需要对早期代码复用一些功能等应用上很有实际价值。”针对于C#主要是对象适配器

    abstract class Player
    {
        protected string name;
        public Player(string name)
        {
            this.name = name;
        }
        public abstract void Attack();
        public abstract void Defense();
    }
抽象球员类Player
    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);
        }
    }
前锋Forwards
    class Center:Player
    {
        public Center(string name):base(name)
        {

        }
        public override void Attack()
        {
            Console.WriteLine("中锋{0}进攻", name);
        }
        public override void Defense()
        {
            Console.WriteLine("中锋{0}防守", name);
        }
    }
中锋Center
    class Guards:Player
    {
        public Guards(string name):base(name)
        {

        }
        public override void Attack()
        {
            Console.WriteLine("后卫{0}进攻", name);
        }
        public override void Defense()
        {
            Console.WriteLine("后卫{0}防守", name);
        }
    }
后卫Guard

但是此时有问题,中国球员是听不懂英语的。所所以:

    class ForeignCenter
    {
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public void 进攻()
        {
            Console.WriteLine("外籍中锋{0}进攻", name);
        }
        public void 防守()
        {
            Console.WriteLine("外籍中锋{0}防守", name);
        }
    }
外籍中锋ForeignCenter
    class Translator:Player
    {
        private ForeignCenter wzf = new ForeignCenter();
        public Translator(string name):base(name)
        {

        }
        public override void Attack()
        {
            wzf.进攻();
        }
        public override void Defense()
        {
            wzf.防守();
        }
    }
翻译Translator