1. 程式人生 > 實用技巧 >C# 設計模式(7)介面卡模式

C# 設計模式(7)介面卡模式

介面卡模式

1. 類介面卡 (通過繼承)

2. 物件介面卡 (通過組合)

組合優於繼承

資料庫適配,程式碼實現:

原始類 Sql server /MySql

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

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

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

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

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

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

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

適配Redis (原始Redis/Redis類適配/Redis物件適配)

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

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

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

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

        public void Delete<T>()
        {
            base.DeleteRedis<T>();
        }

        public void Update<T>()
        {
            base.UpdateRedis<T>();
        }

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

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

        public void Delete<T>()
        {
            _redisHelper.DeleteRedis<T>();
        }

        public void Update<T>()
        {
            _redisHelper.UpdateRedis<T>();
        }

        public void Query<T>()
        {
            _redisHelper.QueryRedis<T>();
        }
    }

程式碼呼叫:

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

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

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

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

結果: