设计模式:适配器模式
作者:互联网
假如现在一个已经上线了的项目,现在为了提高性能需要增加Redis。
Redis的数据操作,第三方已经给提供了,但是他提供的数据操作接口和现在的接口不同,调用端又希望按照之前定义的接口来调用。
适配器模式就是解决这类问题的。
代码演示:
/// <summary> /// 数据操作接口 /// </summary> public interface ISqlHelper { void Add<T>(); void Delete<T>(); void Update<T>(); void Query<T>(); } /// <summary> /// SqlServer 数据库操作类 /// </summary> public class SqlServerHelper : ISqlHelper { public void Add<T>() { Console.WriteLine($"This is {this.GetType().Name} Add."); } public void Delete<T>() { Console.WriteLine($"This is {this.GetType().Name} Delete."); } public void Query<T>() { Console.WriteLine($"This is {this.GetType().Name} Query."); } public void Update<T>() { Console.WriteLine($"This is {this.GetType().Name} Update."); } } /// <summary> /// Redis 数据库操作类 /// 假设是第三方提供的,而且不能修改 /// </summary> public class RedisHelper { public void AddRedis<T>() { Console.WriteLine($"This is {this.GetType().Name} Add!"); } public void DeleteRedis<T>() { Console.WriteLine($"This is {this.GetType().Name} Delete!"); } public void UpdateRedis<T>() { Console.WriteLine($"This is {this.GetType().Name} Update!"); } public void QueryRedis<T>() { Console.WriteLine($"This is {this.GetType().Name} Query!"); } } /// <summary> /// 适配器: 通过继承的方式实现适配(满足ISqlHelper接口,另外继承RedisHelper) /// </summary> public class RedisHelperInherit : RedisHelper, ISqlHelper { public void Add<T>() { base.AddRedis<T>(); } public void Delete<T>() { base.DeleteRedis<T>(); } public void Query<T>() { base.QueryRedis<T>(); } public void Update<T>() { base.UpdateRedis<T>(); } } /// <summary> /// 调用 /// </summary> static void Main(string[] args) { ISqlHelper sqlHelper = new SqlServerHelper(); sqlHelper.Add<Student>(); Console.WriteLine("**************************************"); ISqlHelper redisHelper = new RedisHelperInherit(); redisHelper.Add<Student>(); Console.ReadKey(); }
上面的示例是采用继承的方式来实现的,下面的代码将采用组合的方式来实现,代码如下:
/// <summary> /// 适配器:通过组合的方式来实现 /// </summary> public class RedisHelperCombination : ISqlHelper { /// <summary> /// 字段属性方式组合(方式一) /// 默认构造,特别强硬的 /// </summary> private RedisHelper redisHelper = new RedisHelper(); private RedisHelper _RedisHelper = null; /// <summary> /// 构造函数方式组合(方式二) /// 实例化时传入,相对字段属性灵活一点 /// </summary> public RedisHelperCombination(RedisHelper redisHelper) { this._RedisHelper = redisHelper; } /// <summary> /// 方法方式组合 /// 对象 可有可无,因为方法可调用可不调用 /// </summary> public void AddRedisHelper(RedisHelper redisHelper) { this._RedisHelper = redisHelper; } void ISqlHelper.Add<T>() { this.redisHelper.AddRedis<T>(); } void ISqlHelper.Delete<T>() { this.redisHelper.DeleteRedis<T>(); } void ISqlHelper.Query<T>() { this.redisHelper.QueryRedis<T>(); } void ISqlHelper.Update<T>() { this.redisHelper.UpdateRedis<T>(); } }
标签:Console,redisHelper,适配器,模式,public,ISqlHelper,设计模式,void,RedisHelper 来源: https://www.cnblogs.com/tanyongjun/p/16146299.html