创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
今天说结构型设计模式里的适配器模式
结构型设计模式,其实就是通过封装或者组合的方式,优化改进代码结构
目的:新接口和老接口之间进行适配
途径:类适配器模式和对象适配器模式
使用场景
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进行了适配,后者通过组合对象,进行了适配
以上是本人通过学习,去理解和总结的,如果有什么不当之处,还请大牛指正!