适配器设计模式Adapter Pattern-23种常用设计模式快速入门教程
1.适配器设计模式定义
适配器设计模式是一种结构型设计模式,其目的是将一个类的接口转换成客户端所期望的另一个接口。适配器模式通常用于解决两个不兼容接口之间的问题。适配器模式包含三个角色:目标接口、适配器和被适配者。其中,目标接口是客户端所期望的接口,适配器是实现目标接口并将请求转发给被适配者的类,被适配者是需要被适配的类。
2.适配器设计模式优点:
- 提高系统的复用性
适配器模式可以让不兼容的接口协同工作,从而提高系统的复用性。
- 增强系统的灵活性
适配器模式可以在不改变原有代码的情况下,增加新的适配器类,从而增强系统的灵活性。
- 提高代码的可读性
适配器模式将不兼容的接口进行转换,使得代码更易于理解和维护。
3.适配器设计模式缺点:
- 提高系统的复用性
适配器模式可以让不兼容的接口协同工作,从而提高系统的复用性。
- 增强系统的灵活性
适配器模式可以在不改变原有代码的情况下,增加新的适配器类,从而增强系统的灵活性。
- 提高代码的可读性
适配器模式将不兼容的接口进行转换,使得代码更易于理解和维护。
4.适配器设计模式示例代码
传统设计模式讲解时使用的示例代码,大都采用与读者日常生活接解的业务系统没有多大关联关系。以致大部分读者无法做到学以致用,学完就忘记。本文采用使用日常生活中随处可见的产品相关业务来编写实现代码
假设我们正在开发一个电商平台,需要将旧的订单信息也存到新系统。但是,原来平台的订单接口与我们现在接口不兼容。我们可以使用适配器模式来解决这个问题。下面是一个基于Java的适配器模式示例代码:
// 目标接口
interface Order {
String getId();
double getTotal();
}
// 适配者类
class LegacyOrder {
private final String orderNumber;
private final double amount;
public LegacyOrder(String orderNumber, double amount) {
this.orderNumber = orderNumber;
this.amount = amount;
}
public String getOrderNumber() {
return this.orderNumber;
}
public double getOrderAmount() {
return this.amount;
}
}
// 适配器类
class OrderAdapter implements Order {
private final LegacyOrder legacyOrder;
public OrderAdapter(LegacyOrder legacyOrder) {
this.legacyOrder = legacyOrder;
}
@Override
public String getId() {
return legacyOrder.getOrderNumber();
}
@Override
public double getTotal() {
return legacyOrder.getOrderAmount();
}
}
// 客户端代码
public class AdapterDemo {
public static void main(String[] args) {
LegacyOrder legacyOrder = new LegacyOrder("123456", 45.67);
Order order = new OrderAdapter(legacyOrder);
System.out.println(order.getId()); // 输出:123456
System.out.println(order.getTotal()); // 输出:45.67
}
}
在这个示例中,我们有一个遗留的订单类 LegacyOrder,它具有 getOrderNumber 和 getOrderAmount 方法,但是我们需要将其转换成一个新的接口 Order,该接口具有 getId 和 getTotal 方法。我们创建了一个适配器类 OrderAdapter,它实现了新的接口 Order,并通过组合遗留的订单类 LegacyOrder 来实现新的接口的方法。客户端代码使用适配器类来创建一个新的订单对象,并调用其 getId 和 getTotal 方法。 适配器模式可以很好地解决两个不兼容接口之间的问题,并且可以使已有代码能够与新的代码更好地协同工作。但是,在使用适配器模式时,需要仔细考虑适配器类的设计和其对现有代码的影响。