设计模式结构型之适配器模式

什么是适配器?

适配器是一个接口转换器,它可以是一个独立的硬件接口设备,允许硬件或电子接口与其它硬件或电子接口相连,也可以是信息接口。比如:电源适配器、三角架基座转接部件、USB与串口的转接设备等。

在软件程序中,适配器模式就是要让一个接口变成我们想要的接口,使得原本不兼容的类型可以一起使用。举例说明:

 

 

interface IDbHelper
    {
        void Insert();

        void Delete();

        void Update();

        void Query();
    }

假设我们定义了一个通用的的接口IDbHelper,SqlServerHelper类实现了该接口定义的Insert,Delete,Update,Query方法。我们规定这就是一个标准化的接口。增删改查必须通过该接口去实现。

那么问题来了 ,我们现在要接入使用一个第三方的类,来实现该接口 代码如下。

 class RedisHelper 
    {
        public void DeleteData()
        {
            throw new NotImplementedException();
        }

        public void InsertData()
        {
            throw new NotImplementedException();
        }

        public void QueryData()
        {
            throw new NotImplementedException();
        }

        public void UpdateData()
        {
            throw new NotImplementedException();
        }
    }

可以看出,RedisHelper类中的方法跟原来的定义的标准方法都不一样,这时我们就可以通过适配器模式(两种写法,代码如下)来新增一个类来适应用我们原来的接口。

/// <summary>
    /// 类适配器
    /// </summary>
    public class ClassAdapterRedisHelper : RedisHelper, IDbHelper
    {
        public void Delete()
        {
            base.DeleteData();
        }

        public void Insert()
        {
            base.InsertData();
        }

        public void Query()
        {
            base.QueryData();
        }

        public void Update()
        {
            base.UpdateData();
        }
    }

    /// <summary>
    /// 对象适配器
    /// </summary>
    public class ObjectAdapterRedisHelper :  IDbHelper
    {
       private readonly RedisHelper rh = null;

        public ObjectAdapterRedisHelper()
        {
            rh = new RedisHelper();
        }
        public void Delete()
        {
            rh.DeleteData();
        }

        public void Insert()
        {
            rh.InsertData();
        }

        public void Query()
        {
            rh.QueryData();
        }

        public void Update()
        {
            rh.UpdateData();
        }
    }

 

posted @ 2020-08-23 19:29  一叶青城  阅读(137)  评论(0编辑  收藏  举报