23种设计模式,天天一种设计模式(2)

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

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

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

三、如今有类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         }

四、问题来了,发现RedisHelper方法跟IHelper方法不太适配,为了跟IHelper适配,就须要适配器模式函数

五、这里适配器模式有两种学习

①、类适配器模式优化

  新建一个RedisHelperClass类来继承RedisHelper和IHelper,此时RedisHelperClass至关于适配器this

 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,经过构造函数传递一个RedisHelperspa

 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进行了适配,后者经过组合对象,进行了适配设计

 

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