zoukankan      html  css  js  c++  java
  • 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>();
            }
        }
    

    结果:

  • 相关阅读:
    2007417 13:01:00 运行时数据结构
    2008515 1:38:00 为受灾的人们祈福,祭那些在地震中离开的人
    200732 19:00:00 一段设置8253芯片的程序
    从实模式到保护模式
    200739 18:01:00 linux界的元老
    2007311 19:11:00 cpu执行第一条指令时情形
    20061127 19:54:00 在你心中有这样的一个人吗? (转)
    linux0.11内存管理——try_to_share()
    2007413 20:46:00 linux0.11之copy_page_tables()函数见解
    POJ1258AgriNet
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14069802.html
Copyright © 2011-2022 走看看