【设计模式】- 适配器模式

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

2.形象的例子:姚明刚去NBA需要一个翻译,这个翻译就充当一个适配器的角色。在.NET体系中,经常使用的DataAdapter就是这个模式。

3.适配器模式一般情况下,是在软件后期维护时、或与三方客户对接时候;要求客户修改类、调整己方系统已存在的接口或类比较费劲时,可以考虑使用适配器设计模式,添加一个新的类去适应客户需求。

4.适配模式结构图

 

 

 5.球员UML图

 

 

 6. 具体代码实现

namespace AdapterPattern
{
    /// <summary>
    /// 球员
    /// </summary>
    public abstract class Player
    {
        protected string _name;

        protected Player(string name)
        {
            this._name = name;
        }

        public abstract void Attack();
        public abstract void Defense();

    }
    /// <summary>
    /// 前锋
    /// </summary>
    public class Striker : Player
    {
        public Striker(string name) : base(name)
        {

        }
        public override void Attack()
        {
            Console.WriteLine("前锋{0}进攻",_name);
        }

        public override void Defense()
        {
            Console.WriteLine("前锋{0}防守", _name);
        }

  
    }
    /// <summary>
    /// 中锋
    /// </summary>
    public 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);
        }

    }
    /// <summary>
    /// 后卫
    /// </summary>
    public class Defender : Player
    {
        public Defender(string name) : base(name)
        {

        }
        public override void Attack()
        {
            Console.WriteLine("后卫{0}进攻", _name);
        }

        public override void Defense()
        {
            Console.WriteLine("后卫{0}防守", _name);
        }


    }
}

 

namespace AdapterPattern
{
    /// <summary>
    /// 外籍中锋
    /// </summary>
    public class ForeignCenter
    {
        private string name;

        public string Name { get => name; set => name = value; }


        public void 进攻()
        {
            Console.WriteLine("外籍中锋{0}进攻",Name);
        }

        public void 防守()
        {
            Console.WriteLine("外籍中锋{0}防守", Name);
        }
    }

    /// <summary>
    /// 外籍中锋翻译(适配器)
    /// </summary>
    public class Adapter : Player
    {
        ForeignCenter foreignCenter;
        public Adapter(string name) : base(name)
        {
            foreignCenter = new ForeignCenter();
            foreignCenter.Name = name;
        }
        public override void Attack()
        {
            foreignCenter.进攻();
        }

        public override void Defense()
        {
            foreignCenter.防守();
        }
    }
}

  

class Program
    {
        static void Main(string[] args)
        {
            Player s = new Striker("麦迪");
            Player c = new Center("姚明");
            Player d = new Defender("弗朗西斯");

            s.Attack();
            c.Attack();
            d.Attack();

            Console.WriteLine("-----------------------------------------------------");
            Player s1 = new Striker("麦迪");
            Player c1 = new Adapter("姚明");
            Player d1 = new Defender("弗朗西斯");

            s1.Attack();
            c1.Attack();
            d1.Attack();

            Console.ReadKey();
        }
    }

  

 

posted @ 2021-10-14 13:35  码好每一天  阅读(38)  评论(0编辑  收藏  举报