适配器模式的定义
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器模式的结构和说明
- Client:客户端,调用自己需要的领域接口 Target。
- Target:定义客户端需要的跟特定领域相关的接口。
- Adaptee:已经存在的接口,通常能满足客户端的功能要求,但是接口与客户端要求的特定领域接口不一致,需要被适配。
- Adapter:适配器,把Adaptee 适配成为 Client 需要的 Target。
示例代码
namespace NetCore3Console.Adapter
{
/// <summary>
/// 定义客户端使用的接口,与特定领域相关
/// </summary>
public interface Target
{
/// <summary>
/// 示意方法,客户端请求处理的方法
/// </summary>
void Request();
}
/// <summary>
/// 已经存在的接口,这个接口需要被适配
/// </summary>
public class Adaptee
{
/// <summary>
/// 示意方法,原本已经存在,已经实现的方法
/// </summary>
public void SpecificRequest()
{
//具体的功能处理
}
}
public class Adapter : Target
{
//持有需要被适配的接口对象
private Adaptee _adaptee;
public Adapter(Adaptee adaptee)
{
_adaptee = adaptee;
}
public void Request()
{
//可能转调已经实现了的方法,进行适配
_adaptee.SpecificRequest();
}
}
}
认识适配器模式
模式的功能
适配器模式的主要功能是进行转换匹配,目的是复用已有的功能,而不是来实现新的接口。也就是说,客户端需要的功能应该是已经实现好了的,不需要适配器模式来实现,适配器模式主要负责把不兼容的接口转换成客户端期望的样子就可以了。
但这并不是说,在适配器里面就不能实现功能。适配器里面可以实现功能,称这种适配器为智能适配器。再说了,在接口匹配和转换的过程中,也有可能需要额外实现一定的功能,才能够转换过来,比如需要调整参数以进行匹配等。
Adaptee 和Target 的关系
适配器模式中被适配的接口 Adaptee 和适配成为的接口 Target 是没有关联的,也就是说,Adaptee 和 Target 中的方法既可以相同,也可以不同。极端情况下两个接口里面的方法可能是完全不同的,当然这种情况下也可以完全相同。
这里所说的相同和不同,是指方法定义的名称、参数列表、返回值,以及方法本身的功能都可以相同或不同。
对象组合
适配器的实现方式其实是依靠对象组合的方式。通过给适配器对象组合被适配的对象,然后当客户端调用 Target 的时候,适配器会把相应的功能委托给被适配的对象去完成。
适配器模式的实现
智能适配器
适配器也可以实现一些 Adaptee 没有实现,但是在 Target 中定义的功能。这种情况就需要在适配器的实现里面,加入新功能的实现。这种适配器被称为智能适配器。
适配多个 Adaptee
适配器在适配的时候,可以适配多个 Adaptee,也就是说实现某个新的 Target 的功能的时候,需要调用多个模块的功能,适配多个模块的功能才能满足新接口的要求。
双向适配器
适配器也可以实现双向的适配,前面我们讲的都是把Adaptee 适配成为 Target,其实也可以把 Target 适配成为 Adaptee。也就是说这个适配器可以同时当作 Target 和Adaptee 来使用。
对象适配器和类适配器
在标准的适配器模式里面,根据适配器的实现方式,把适配器分成了两种,一种是对象适配器,另一种是类适配器。
对象适配器的实现:依赖于对象组合。就如同前面的实现示例,都是采用对象组合的方式,也就是对象适配器实现的方式。
类适配器的实现:采用多重继承对一个接口与另一个接口进行匹配。由于 Java 不支持多重继承,所以到目前为止还没有涉及。
思考适配器模式
适配器模式的本质
适配器模式的本质是:转换匹配,复用功能.
适配器通过转换调用已有的实现,从而能把已有的实现匹配成需要的接口,使之能满足客户端的需要。也就是说转换匹配是手段,而复用已有的功能才是目的。
在进行转换匹配的过程中,适配器还可以在转换调用的前后实现一些功能处理,也就是实现智能的适配。
标签:Target,04,实现,适配,适配器,接口,模式,Adaptee From: https://www.cnblogs.com/huiteresa/p/17455041.html