设计模式:适配器模式
2022/4/14 23:13:57
本文主要是介绍设计模式:适配器模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
假如现在一个已经上线了的项目,现在为了提高性能需要增加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>(); } }
这篇关于设计模式:适配器模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程
- 2024-11-26Springboot单体架构搭建资料详解与实战教程
- 2024-11-26Springboot框架资料:新手入门教程
- 2024-11-26Springboot企业级开发资料入门教程
- 2024-11-26SpringBoot企业级开发资料详解与实战教程
- 2024-11-26Springboot微服务资料:新手入门全攻略