结构型的设计模式都是关注类与类的关系,适配器模式顾名思义就是将两种不同的东西通过中间的某种介质使其产生关系,简称包一层,在很多情况下这种思路是很有效的。
下面来说说我们的使用场景:在项目的第一阶段,我们使用sqlserver数据库来支撑我们的项目,我们在项目中定义了一个Ihelper数据访问接口,定义了增删改查的四个泛型接口,刚开始的时候,这种关系型的数据能满足我们的日常需求,到后期发现普通的关系型数据库无法满足我们用户的访问,这时候要考虑增加Redis了 ,可是这时候我们代码只实现了我们定义的接口,这时候发现Redis里面的方法并不满足我们定义的接口,这时候怎么办呢,这时候适配器模式就派上用场了。
/// <summary> /// 定义数据接口规范 /// </summary> interface Ihelper { void Slect(); void Delete(); void Update(); void Add(); } /// <summary> /// 第一次满足我们定义的接口 /// </summary> public class SqlServer : Ihelper { public void Add() { Console.WriteLine("SqlServer 增加"); } public void Delete() { Console.WriteLine("SqlServer 删除"); } public void Slect() { Console.WriteLine("SqlServer 查询"); } public void Update() { Console.WriteLine("SqlServer 修改"); } } /// <summary> /// 中途插进来的 并不满足我们定义的规范 /// </summary> public class Redis { public void RedisAdd() { Console.WriteLine("Redis 增加"); } public void RedisDelete() { Console.WriteLine("Redis 删除"); } public void RedisSlect() { Console.WriteLine("Redis 查询"); } public void RedisUpdate() { Console.WriteLine("Redis 修改"); } } /// <summary> /// 类适配器 通过继承实现 继承实现是强耦合,继承了父类所有的方法,属性,灵活度低,父类不能更改 /// </summary> public class Adapter : Redis, Ihelper { public void Add() { base.RedisAdd(); } public void Delete() { base.RedisDelete(); } public void Slect() { base.RedisSlect(); } public void Update() { base.RedisUpdate(); } } /// <summary> ///对象适配器 通过组合实现 实现的类可以有上端指定 灵活度高一点 /// </summary> public class Adapter2 : Ihelper { private Redis _Redis = new Redis(); public void Add() { this._Redis.RedisAdd(); } public void Delete() { this._Redis.RedisDelete(); } public void Slect() { this._Redis.RedisSlect(); } public void Update() { this._Redis.RedisUpdate(); } }
应用场景:我们定义的接口和我们拥有的实现类不匹配,基于现有的东西的改造,并不是在我们设计之初实现的,更多的是我们重构项目的时候使用的,集成第三方的东西使用。
实现:继承或者组合 增加一个中间类。
对象适配器 通过组合实现 实现的类可以有上端指定 灵活度高一点。
类适配器 通过继承实现 继承实现是强耦合,继承了父类所有的方法,属性,灵活度低,父类不能更改。
原文:https://www.cnblogs.com/wshnzxj/p/13929467.html