C# 设计模式(7)适配器模式


适配器模式

1. 类适配器 (通过继承)

2. 对象适配器 (通过组合)

组合优于继承

数据库适配,代码实现:

原始类 Sql server /MySql

namespace AdapterPattern
{
    interface IHelper
    {
        void Add();
        void Delete();
        void Update();
        void Query();
    }
   public  class SqlHelper:IHelper
    {
        public void Add()
        {
            Console.WriteLine($"{this.GetType().Name} Add Data");
        }

        public void Delete()
        {
            Console.WriteLine($"{this.GetType().Name} Delete Data");
        }

        public void Update()
        {
            Console.WriteLine($"{this.GetType().Name} Update Data");
        }

        public void Query()
        {
            Console.WriteLine($"{this.GetType().Name} Query Data");
        }
    }
    public class MySqlHelper:IHelper
    {
        public void Add()
        {
            Console.WriteLine($"{this.GetType().Name} Add Data");
        }

        public void Delete()
        {
            Console.WriteLine($"{this.GetType().Name} Delete Data");
        }

        public void Update()
        {
            Console.WriteLine($"{this.GetType().Name} Update Data");
        }

        public void Query()
        {
            Console.WriteLine($"{this.GetType().Name} Query Data");
        }
    }
}

适配Redis (原始Redis/Redis类适配/Redis对象适配)

   public  class RedisHelper
    {
        public void AddRedis()
        {
            Console.WriteLine($"{this.GetType().Name} Add Data");
        }

        public void DeleteRedis()
        {
            Console.WriteLine($"{this.GetType().Name} Delete Data");
        }

        public void UpdateRedis()
        {
            Console.WriteLine($"{this.GetType().Name} Update Data");
        }

        public void QueryRedis()
        {
            Console.WriteLine($"{this.GetType().Name} Query Data");
        }
    }
   public  class RedisHelperClass:RedisHelper,IHelper
    {
        public void Add()
        {
            base.AddRedis();
        }

        public void Delete()
        {
            base.DeleteRedis();
        }

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

        public void Query()
        {
            base.QueryRedis();
        }
    }
   public  class RedisHelperObject:IHelper
    {
        private readonly RedisHelper _redisHelper;

        public RedisHelperObject(RedisHelper redisHelper)
        {
            _redisHelper = redisHelper;
        }
        public void Add()
        {
            _redisHelper.AddRedis();
        }

        public void Delete()
        {
            _redisHelper.DeleteRedis();
        }

        public void Update()
        {
            _redisHelper.UpdateRedis();
        }

        public void Query()
        {
            _redisHelper.QueryRedis();
        }
    }

代码调用:

    class Program
    {
        static void Main(string[] args)
        {
            SqlHelper sqlHelper = new SqlHelper();
            sqlHelper.Add();
            sqlHelper.Delete();
            sqlHelper.Update();
            sqlHelper.Query();

            MySqlHelper mySqlHelper = new MySqlHelper();
            mySqlHelper.Add();
            mySqlHelper.Delete();
            mySqlHelper.Update();
            mySqlHelper.Query();

            RedisHelperClass redisHelperClass = new RedisHelperClass();
            redisHelperClass.Add();
            redisHelperClass.Delete();
            redisHelperClass.Update();
            redisHelperClass.Query();

            RedisHelperObject redisHelperObject = new RedisHelperObject(new RedisHelper());
            redisHelperObject.Add();
            redisHelperObject.Delete();
            redisHelperObject.Update();
            redisHelperObject.Query();
        }
    }

结果: