zoukankan      html  css  js  c++  java
  • 23种设计模式,每天一种设计模式(2)

    创建型模式,共五种:工厂方法模式抽象工厂模式单例模式建造者模式原型模式

    结构型模式,共七种:适配器模式装饰器模式代理模式外观模式桥接模式组合模式享元模式
    行为型模式,共十一种:策略模式模板方法模式观察者模式迭代子模式责任链模式命令模式备忘录模式状态模式访问者模式中介者模式解释器模式
     
    今天说结构型设计模式里的适配器模式
     
    结构型设计模式,其实就是通过封装或者组合的方式,优化改进代码结构
     
    目的:新接口和老接口之间进行适配
    途径:类适配器模式和对象适配器模式
     
     
    使用场景
    1、有一个接口IHelper,里边有四个方法,增删改查
    1     public interface IHelper
    2     {
    3         void Add<T>();
    4         void Delete<T>();
    5         void Update<T>();
    6         void Query<T>();
    7     }

    2、子类MysqlHelper、OracleHelper、SqlserverHelper继承了IHelper,并实现IHelper接口

    3、现在有类RedisHelper,他有四个方法增删改查

     1         public void AddRedis<T>()
     2         {
     3             Console.WriteLine("This is {0} Add", this.GetType().Name);
     4         }
     5         public void DeleteRedis<T>()
     6         {
     7             Console.WriteLine("This is {0} Delete", this.GetType().Name);
     8         }
     9         public void UpdateRedis<T>()
    10         {
    11             Console.WriteLine("This is {0} Update", this.GetType().Name);
    12         }
    13         public void QueryRedis<T>()
    14         {
    15             Console.WriteLine("This is {0} Query", this.GetType().Name);
    16         }    

    4、问题来了,发现RedisHelper方法跟IHelper方法不太适配,为了跟IHelper适配,就需要适配器模式

    5、这里适配器模式有两种

    ①、类适配器模式

      新建一个RedisHelperClass类来继承RedisHelper和IHelper,此时RedisHelperClass相当于适配器

     1     public class RedisHelperClass : RedisHelper, IHelper
     2     {
     3         public void Add<T>()
     4         {
     5             base.AddRedis<T>();
     6         }
     7 
     8         public void Delete<T>()
     9         {
    10             base.DeleteRedis<T>();
    11         }
    12 
    13         public void Update<T>()
    14         {
    15             base.UpdateRedis<T>();
    16         }
    17 
    18         public void Query<T>()
    19         {
    20             base.QueryRedis<T>();
    21         }
    22     }

    ②、对象适配器模式RedisHelperObject,通过构造函数传递一个RedisHelper

     1     public class RedisHelperObject : IHelper
     2     {
     3         //private RedisHelper _RedisHelper = new RedisHelper();
     4         private RedisHelper _RedisHelper = null;
     5         public RedisHelperObject(RedisHelper redisHelper)
     6         {
     7             this._RedisHelper = redisHelper;
     8         }
     9 
    10         public RedisHelperObject()
    11         {
    12             this._RedisHelper = new RedisHelper();
    13         }
    14 
    15         public void Add<T>()
    16         {
    17             this._RedisHelper.AddRedis<T>();
    18         }
    19 
    20         public void Delete<T>()
    21         {
    22             this._RedisHelper.DeleteRedis<T>();
    23         }
    24 
    25         public void Update<T>()
    26         {
    27             this._RedisHelper.UpdateRedis<T>();
    28         }
    29 
    30         public void Query<T>()
    31         {
    32             this._RedisHelper.QueryRedis<T>();
    33         }
    34     }

    总结:适配器模式,有类适配器模式和对象适配器模式,在上面的例子里RedisHelperClass和RedisHelperObject都充当了适配器的角色,前者通过继承的关系,使RedisHelperClass和MysqlHelper、OracleHelper、SqlserverHelper进行了适配,后者通过组合对象,进行了适配

    以上是本人通过学习,去理解和总结的,如果有什么不当之处,还请大牛指正!

  • 相关阅读:
    寻找研究基于NS2研究覆盖网络的小伙伴:)
    ubuntu14.04 键盘错位小问题
    关于NS2安装的若干问题
    关于ubuntu下词典安装
    与NS2一起度过第一个圣诞夜!(NS2入门学习参考资料)
    【转】影响CSS渲染速度的十条编码方法与建议
    类型初始值设定项引发异常
    【转】实用的CSS Hack
    【转】CSS技巧:五个方面促进你写出更加专业的CSS代码
    IIS6.0架构
  • 原文地址:https://www.cnblogs.com/baixiaoguang/p/8268868.html
Copyright © 2011-2022 走看看