为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,使得子系统更容易使用。
// 子系统1: 库存系统
class InventorySystem {
public boolean checkStock(String productId, int quantity) {
// 检查库存是否足够
System.out.println("检查库存...");
// 省略实际的库存检查逻辑
return true;
}
}
// 子系统2: 订单系统
class OrderSystem {
public String generateOrder(String productId, int quantity, String customerName) {
// 生成订单
System.out.println("生成订单...");
// 省略实际的订单生成逻辑
return "Order#123";
}
}
// 子系统3: 邮件通知系统
class EmailNotificationSystem {
public void sendOrderConfirmationEmail(String orderId, String customerEmail) {
// 发送订单确认邮件
System.out.println("发送订单确认邮件...");
// 省略实际的邮件发送逻辑
}
}
// 外观类
class OnlineShoppingFacade {
private InventorySystem inventorySystem;
private OrderSystem orderSystem;
private EmailNotificationSystem emailNotificationSystem;
public OnlineShoppingFacade() {
this.inventorySystem = new InventorySystem();
this.orderSystem = new OrderSystem();
this.emailNotificationSystem = new EmailNotificationSystem();
}
// 提供一个简化的接口,让客户端可以通过一个方法完成整个购物流程
public void purchase(String productId, int quantity, String customerName, String customerEmail) {
System.out.println("开始购物流程...");
boolean stockAvailable = inventorySystem.checkStock(productId, quantity);
if (stockAvailable) {
String orderId = orderSystem.generateOrder(productId, quantity, customerName);
emailNotificationSystem.sendOrderConfirmationEmail(orderId, customerEmail);
System.out.println("购物流程完成");
} else {
System.out.println("库存不足,购物流程失败");
}
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
// 使用外观类简化购物流程
OnlineShoppingFacade shoppingFacade = new OnlineShoppingFacade();
shoppingFacade.purchase("ProductA", 2, "John Doe", "john@example.com");
}
}