设计模式概述:适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,它的主要作用是使得原本由于接口不兼容而不能一起工作的类能够在一起工作。通过引入适配器,使得接口不兼容的类能够进行协作。适配器模式通常被用于已有系统中,以增强复用性和可扩展性。
关键组成部分
目标接口(Target):这是客户所期待的接口,也就是客户端所需要的接口。
需要适配的类(Adaptee):这个类是有其自己的接口,客户端无法直接使用它,因为它的接口不符合目标接口。
适配器(Adapter):适配器类实现目标接口,并且内部持有一个对Adaptee的引用。适配器方法中,会将调用委派给Adaptee的方法,或者在转换数据以后调用。
两种常见形式
对象适配器:通过组合来适配接口,适配器持有对Adaptee的引用。
// Adaptee
class Adaptee {
public void specificRequest() {
System.out.println("Specific request.");
}
}
// Target
interface Target {
void request();
}
// Adapter
class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
public void request() {
adaptee.specificRequest();
}
}
类适配器(使用多重继承,在Java中通过接口的方式实现,这里不多展示): 通过继承进行适配,这种方式不常见因为多重继承的限制。
使用场景举例
遗留系统的集成:当我们需要在一个新的系统中使用一个已经存在的类,但它的接口与系统要求的接口不兼容。
第三方库的使用:当一个系统需要使用一个第三方库,但是客户端需要的接口和第三方提供的接口不一致。
代码重构:在不修改已有代码的前提下对系统进行改造。
优点与缺点
优点:
- 单一职责原则:通过将实现与接口隔离开来,增加代码的可读性和可维护性。
- 开放–封闭原则:系统中扩展和修改更加方便,可以在不改变目标接口的情况下进行。
缺点:
- 增加系统的复杂度,尤其适配工作复杂时,可能使代码难以理解和维护。
适配器模式是面向对象设计中常用的模式,可以帮助开发者在不改变已有代码的基础上实现系统的功能的增强。