.net设计模式 (适配器模式)学习笔记

运用设计模式只是为了解决一类问题的,当解决掉当前一类问题,通常会在解决这个问题时候 带来其他问题  合理应用扬长避短


结构性设计模式:

                          .net设计模式 (适配器模式)学习笔记     

概要:  适配器模式多用于 对现有 系统的改造 或者集成 第三方功能的时候。为贴合 自身系统 所做的改造。 对 本身系统 和 第三方功能 不做修改。只做自身系统做扩展

  • 对象适配器    通过组合实现

  • 类适配器        通过继承实现 强耦合,灵活度低    

 

比方说我们  现有系统 数据库 对 Mysql, sqlsever, Oracal 都有封装, 后来需要对系统进行优化,添加了第三方的 Redis(内存数据) 来做数据的优化。 接下来 我们将用 适配器模式在不修改原有代码的。  情况下 用适配器模式 扩展出对 Redis 的支持!

    /// <summary>
    /// 原有 数据访问接口
    /// </summary>
    public  interface IHelper
    {
        void Add<T>();
        void Delete<T>();
        void Update<T>();
        void Query<T>();

    }


    //原有对mysql 的支持
    public class MysqlHelper : IHelper
    {
        public void Add<T>()
        {
            Console.WriteLine("This is {0} Add", this.GetType().Name);
        }

        public void Delete<T>()
        {
            Console.WriteLine("This is {0} Delete", this.GetType().Name);
        }

        public void Query<T>()
        {
            Console.WriteLine("This is {0} Query", this.GetType().Name);
        }

        public void Update<T>()
        {
            Console.WriteLine("This is {0} Update", this.GetType().Name);
        }
    }




    //原有对Orical 的支持
    public class OraclHelper : IHelper
    {
        public void Add<T>()
        {
            Console.WriteLine("This is {0} Add", this.GetType().Name);
        }

        public void Delete<T>()
        {
            Console.WriteLine("This is {0} Delete", this.GetType().Name);
        }

        public void Query<T>()
        {
            Console.WriteLine("This is {0} Query", this.GetType().Name);
        }

        public void Update<T>()
        {
            Console.WriteLine("This is {0} Update", this.GetType().Name);
        }
    }



    //原有对 Sqlserver 的支持
    public class SqlserverHelper : IHelper
    {
        public void Add<T>()
        {
            Console.WriteLine("This is {0} Add",this.GetType().Name);
        }

        public void Delete<T>()
        {
            Console.WriteLine("This is {0} Delete", this.GetType().Name);
        }

        public void Query<T>()
        {
            Console.WriteLine("This is {0} Query", this.GetType().Name);
        }

        public void Update<T>()
        {
            Console.WriteLine("This is {0} Update", this.GetType().Name);
        }
    }








    /// <summary>
    /// 为优化效率   第三方 提供 新添新的功能   
    /// </summary>
    public class RedisHelpercs
    {
        public void AddRedis<T>()
        {
            Console.WriteLine("This is {0} Add", this.GetType().Name);
        }

        public void DeleteRedis<T>()
        {
            Console.WriteLine("This is {0}  Delete", this.GetType().Name);
        }

        public void UpdateRedis<T>()
        {
            Console.WriteLine("This is {0}  Update", this.GetType().Name);
        }

        public void QueryRedis<T>()
        {
            Console.WriteLine("This is {0} Query", this.GetType().Name);
        }
    }







    /// <summary>
    /// 类适配器 
    /// </summary>
    public class RedisHelpercsClassAdpater : RedisHelpercs, IHelper
    {
        void IHelper.Add<T>()
        {
            base.AddRedis<T>();
        }

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

        void IHelper.Query<T>()
        {
            base.QueryRedis<T>();
        }

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




    /// <summary>
    /// 对象 适配器  
    /// </summary>
    public class RedisHelpercsObjectAdpater : IHelper
    {
        private RedisHelpercs redisHelpercs;
        public RedisHelpercsObjectAdpater(RedisHelpercs _redisHelpercs)
        {
            this.redisHelpercs = _redisHelpercs;
        }

        void IHelper.Add<T>()
        {
            this.redisHelpercs.AddRedis<T>();
        }

        void IHelper.Delete<T>()
        {
            this.redisHelpercs.DeleteRedis<T>();
        }

        void IHelper.Query<T>()
        {
            this.redisHelpercs.QueryRedis<T>();
        }

        void IHelper.Update<T>()
        {
            this.redisHelpercs.UpdateRedis<T>();
        }
    }
    

从代码我们可以看出: 所谓 适配器 就是 在不对原有代码进行修改的情况下, 对新填的功能部分 加了一层 甚至 两层 来适应 当前系统

        

    class Program
    {
        static void Main(string[] args)
        {
            //以前的方式1
            IHelper helper = new MysqlHelper();
            helper.Add<int>();
            helper.Delete<int>();

            //以前的方式2
            IHelper helper1 = new OraclHelper();
            helper1.Add<int>();
            helper1.Delete<int>();



            //类的适配器 方式
            IHelper helper2 = new RedisHelpercsClassAdpater();
            helper2.Add<int>();
            helper2.Delete<int>();


            //对象适配器 方式
            IHelper helper3 = new RedisHelpercsObjectAdpater(new RedisHelpercs());
            helper3.Add<int>();
            helper3.Delete<int>();
        }
    }

 

猜你喜欢

转载自blog.csdn.net/nicepainkiller/article/details/83541876