参考文献

外观模式

  • 能为程序库、 框架或其他复杂类提供一个简单的接口

组件

  • 外观(Facade):外观对象是客户端与子系统之间的接口,它封装了子系统的复杂性,提供了一个简化的接口供客户端使用.
  • 子系统(Subsystems):子系统是一组相关的类或接口,它们实现了系统的各个功能.子系统可以包含多个类和层次结构,但是通过外观对象,客户端只需要与外观对象进行交互,而不需要直接与子系统的各个类打交道.
  • 客户端(Client):客户端是使用外观模式的对象.它通过外观对象来访问子系统的功能,而不需要了解子系统的具体实现.

实现方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// 子系统类:库存管理系统
class InventorySystem {
public void updateInventory(String productId, int quantity) {
System.out.println("Inventory updated for product " + productId + ", quantity: " + quantity);
}
}

// 子系统类:支付系统
class PaymentSystem {
public void processPayment(String orderId, double amount) {
System.out.println("Payment processed for order " + orderId + ", amount: " + amount);
}
}

// 子系统类:物流系统
class ShippingSystem {
public void shipOrder(String orderId) {
System.out.println("Order " + orderId + " shipped");
}
}

// 外观类:订单处理系统
class OrderProcessingSystem {
private InventorySystem inventorySystem;
private PaymentSystem paymentSystem;
private ShippingSystem shippingSystem;

public OrderProcessingSystem() {
this.inventorySystem = new InventorySystem();
this.paymentSystem = new PaymentSystem();
this.shippingSystem = new ShippingSystem();
}

// 提供简化的接口供客户端使用
public void processOrder(String productId, int quantity, String orderId, double amount) {
inventorySystem.updateInventory(productId, quantity);
paymentSystem.processPayment(orderId, amount);
shippingSystem.shipOrder(orderId);
}
}

// 客户端代码
public class Client {
public static void main(String[] args) {
OrderProcessingSystem orderProcessingSystem = new OrderProcessingSystem();
orderProcessingSystem.processOrder("123", 10, "456", 100.0);
}
}

使用场景

  • 您想要对子系统进行分层.使用外观来定义每个子系统级别的入口点.如果子系统是相关的,那么您可以通过使它们仅通过外观相互通信来简化它们之间的依赖关系.

  • 客户端和抽象的实现类之间存在许多依赖关系.引入外观将子系统与客户端和其他子系统解耦,从而提高子系统的独立性和可移植性.

  • 实际场景示例:

    • 数据库访问: 在数据库访问过程中,可能需要处理连接管理、SQL查询、事务管理等多个子系统.通过使用外观模式,可以创建一个数据库访问外观类,封装这些子系统,并提供一个简化的接口给开发人员进行数据库操作.
    • 购物网站: 一个购物网站可能包含用户认证、商品管理、购物车、支付等多个子系统.通过使用外观模式,可以创建一个购物网站外观类,封装这些子系统的复杂性,并为用户提供一个简单的接口来浏览商品、选择商品、支付等操作.
    • 操作系统接口: 操作系统提供了很多底层接口和服务,如文件系统、网络通信、进程管理等.通过使用外观模式,可以创建一个操作系统外观类,封装这些底层接口和服务,并提供一个更高级别的接口给应用程序开发人员进行操作系统相关的开发.