解析C#设计模式编程中适配器模式的实现

2019-12-26 17:40:33王冬梅
  •   Target:Client所使用的与特定领域相关的接口。
  •   Client:与符合Target接口的对象协调的类。
  •   Adaptee:需要适配的类接口。
  •   Adapter:适配器,负责Adaptee的接口与Target接口进行适配。

      在适配器模式中,类Adapter实现适配器的功能,它在Client于Adaptee之间加入Adapter,这样Client把请求发给接口为Target的类Adapter,再由Adapter调用Adaptee,从而实现Client调用Adaptee。

    3、类的适配器模式实现
    在这里以生活中的一个例子来进行演示适配器模式的实现,具体场景是: 在生活中,我们买的电器插头是2个孔的,但是我们买的插座只有三个孔的,此时我们就希望电器的插头可以转换为三个孔的就好,这样我们就可以直接把它插在插座上,此时三个孔插头就是客户端期待的另一种接口,自然两个孔的插头就是现有的接口,适配器模式就是用来完成这种转换的,具体实现代码如下:

    
    using System;
    /// 这里以插座和插头的例子来诠释适配器模式
    /// 现在我们买的电器插头是2个孔,但是我们买的插座只有3个孔的
    /// 这是我们想把电器插在插座上的话就需要一个电适配器
    namespace 设计模式之适配器模式
    {
      /// <summary>
      /// 客户端,客户想要把2个孔的插头 转变成三个孔的插头,这个转变交给适配器就好
      /// 既然适配器需要完成这个功能,所以它必须同时具体2个孔插头和三个孔插头的特征
      /// </summary>
      class Client
      {
        static void Main(string[] args)
        {
          // 现在客户端可以通过电适配要使用2个孔的插头了
          IThreeHole threehole = new PowerAdapter();
          threehole.Request();
          Console.ReadLine();
        }
      }
      /// <summary>
      /// 三个孔的插头,也就是适配器模式中的目标角色
      /// </summary>
      public interface IThreeHole
      {
        void Request();
      }
      /// <summary>
      /// 两个孔的插头,源角色——需要适配的类
      /// </summary>
      public abstract class TwoHole
      {
        public void SpecificRequest()
        {
          Console.WriteLine("我是两个孔的插头");
        }
      }
      /// <summary>
      /// 适配器类,接口要放在类的后面
      /// 适配器类提供了三个孔插头的行为,但其本质是调用两个孔插头的方法
      /// </summary>
      public class PowerAdapter:TwoHole,IThreeHole
      {
        /// <summary>
        /// 实现三个孔插头接口方法
        /// </summary>
        public void Request()
        {
          // 调用两个孔插头方法
          this.SpecificRequest();
        }
      }
    }