设计模式结构型之适配器模式
什么是适配器?
适配器是一个接口转换器,它可以是一个独立的硬件接口设备,允许硬件或电子接口与其它硬件或电子接口相连,也可以是信息接口。比如:电源适配器、三角架基座转接部件、USB与串口的转接设备等。
在软件程序中,适配器模式就是要让一个接口变成我们想要的接口,使得原本不兼容的类型可以一起使用。举例说明:
interface IDbHelper { void Insert(); void Delete(); void Update(); void Query(); }
假设我们定义了一个通用的的接口IDbHelper,SqlServerHelper类实现了该接口定义的Insert,Delete,Update,Query方法。我们规定这就是一个标准化的接口。增删改查必须通过该接口去实现。
那么问题来了 ,我们现在要接入使用一个第三方的类,来实现该接口 代码如下。
class RedisHelper { public void DeleteData() { throw new NotImplementedException(); } public void InsertData() { throw new NotImplementedException(); } public void QueryData() { throw new NotImplementedException(); } public void UpdateData() { throw new NotImplementedException(); } }
可以看出,RedisHelper类中的方法跟原来的定义的标准方法都不一样,这时我们就可以通过适配器模式(两种写法,代码如下)来新增一个类来适应用我们原来的接口。
/// <summary> /// 类适配器 /// </summary> public class ClassAdapterRedisHelper : RedisHelper, IDbHelper { public void Delete() { base.DeleteData(); } public void Insert() { base.InsertData(); } public void Query() { base.QueryData(); } public void Update() { base.UpdateData(); } } /// <summary> /// 对象适配器 /// </summary> public class ObjectAdapterRedisHelper : IDbHelper { private readonly RedisHelper rh = null; public ObjectAdapterRedisHelper() { rh = new RedisHelper(); } public void Delete() { rh.DeleteData(); } public void Insert() { rh.InsertData(); } public void Query() { rh.QueryData(); } public void Update() { rh.UpdateData(); } }