适配者模式 Adapter Pattern,常见的设计模式之一。
目标接口 ITarget 与 类Adaptee 本来没有任何关系。但是可以使用一个新的子类Adaptee来继承和实现这两个类。相当于将逻辑合并,使不同的类型一起合作。常见的就是一个类,继承于父类,并实现一个或多个接口。比如类SqlCommand就是适配者模式的实现。【 System.Data.SqlClient.SqlCommand : DbCommand, ICloneable】。
示例代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*
* 适配者模式 Adapter Pattern。
* 比如类SqlCommand就是适配者模式的实现。【 System.Data.SqlClient.SqlCommand : DbCommand, ICloneable】
* 目标接口 ITarget 与 类Adaptee 本来没有任何关系。但是可以使用一个新的子类Adapter来继承和实现这两个目标。相当于将逻辑合并
* 不改变原有的逻辑基础上,增加新的逻辑
* 将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。
在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。。
适配者类的概念关键就是将两个不太兼容的集成到适配者类中,然后客户通过适配器类能够调用目标类和适配者类两个的方法。就相当于一个并集!
在以后进行开发时可以找类似可以使用这种设计模式的地方,提高代码的可重用性,和灵活性!
缺点:日益增加的业务逻辑,导致查错比较困难,后续维护成本较大
*/
namespace AdapterPatternDemo
{
class Program
{
static void Main(string[] args)
{
ITarget target = new Adapter();
target.Request();
Console.ReadLine();
}
}
/// <summary>
/// 目标接口
/// </summary>
public interface ITarget
{
void Request();
}
/// <summary>
/// 其他接口
/// </summary>
public interface IOther
{
void OtherMethod();
}
/// <summary>
/// 被适配者; 源角色; 适配者类
/// </summary>
public class Adaptee
{
public virtual void SpecificRequest()
{
Console.WriteLine("适配器类的方法");
}
}
/// <summary>
/// 适配器,关键业务逻辑类:继承于父类的方法SpecificRequest,同时实现接口
/// C#中 只能继承一个父类,但可以实现多个接口
/// </summary>
public class Adapter : Adaptee, ITarget, IOther
{
public void Request()
{
Console.WriteLine("在接口的实现时调用父类的方法");
base.SpecificRequest();
Console.WriteLine("也可能调用其他接口逻辑");
OtherMethod();
}
public void OtherMethod()
{
Console.WriteLine("实现IOther接口");
}
}
}
程序运行如图: