C#学习笔记之适配器模式详解

2019-12-30 18:57:36于丽

具体实现:

 


class Program
  {
    static void Main(string[] args)
    {
      Player b = new Forwards("A");
      b.Attack();

      Player m = new Guards("B");
      m.Attack();
      
      //通过翻译,姚明知道了需要做的事情
      Player ym = new Translator("姚明");
      ym.Attack();
      ym.Defense();

      Console.Read();
    }

    abstract class Player
    {
      protected string name;
      public Player(string name)
      {
        this.name = name;
      }
      public abstract void Attack();
      public abstract void Defense();
    }
    /// <summary>
    /// 前锋
    /// </summary>
    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);
      }
    }
    /// <summary>
    /// 中锋
    /// </summary>
    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>
    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);
      }
    }
    /// <summary>
    /// 翻译是继承于运动员的,因为他需要直接理解教练的意思
    /// 但是他实际需要传达的是外籍球员,所以他调用的是外籍球员所理解的方法=>也就是翻译的作用
    /// </summary>
    class Translator : Player
    {
      private ForeignCenter fc = new ForeignCenter();
      public Translator(string name) : base(name)
      {
        fc.Name = name;
      }
      public override void Attack()
      {
        fc.进攻();
      }
      public override void Defense()
      {
        fc.防守();
      }
    }
    /// <summary>
    /// 作为外籍球员,他有自己的姓名和进攻防守方式等
    /// 其他的事情交给翻译就好了
    /// </summary>
    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);
      }
    }
  }

适配器模式的优缺点

   像之前提到的适配器能在后期维护的时候起到很大的作用,能在开发新的功能的时候保护原来软件的稳定性,但是初期的时候还是能避免就尽量避免吧!