前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之外观模式

设计模式之外观模式

作者头像
九转成圣
发布2024-04-15 07:59:46
750
发布2024-04-15 07:59:46
举报
文章被收录于专栏:csdncsdn

外观模式(Facade)

定义

为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,使得子系统更容易使用。

使用场景

  1. 简化复杂系统接口:当一个系统变得复杂且包含许多子系统时,使用外观模式可以提供一个简化的接口,使客户端与系统之间的交互更加简单。
  2. 解耦客户端与子系统: 外观模式可以将客户端代码与系统的子系统解耦,使客户端不需要直接与复杂的子系统交互。这有助于降低客户端代码的复杂性。
  3. 提供子系统的单一入口: 外观模式为整个系统提供了一个单一的入口,客户端只需要与外观类交互,而不必直接与多个子系统打交道。
  4. 封装系统变化: 当系统内部的变化可能影响到客户端代码时,使用外观模式可以将变化封装在外观类中,减少对客户端的影响
  5. 支持松耦合:外观模式有助于实现系统中的松耦合,因为客户端只需要与外观类进行交互,而不需要了解系统内部的具体实现。
  6. 简化大型系统的管理: 在大型系统中,有许多模块和子系统,使用外观模式可以简化系统的管理和维护。

主要角色

  1. 外观类
  2. 子系统

类图

示例代码

代码语言:javascript
复制
// 子系统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");
    }
}
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 外观模式(Facade)
  • 定义
  • 使用场景
  • 主要角色
  • 类图
  • 示例代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com