• Java设计模式之外观模式(Facade Pattern)


    外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式通过隐藏子系统的复杂性,简化了客户端与子系统之间的交互,提供了一个更简单、更直观的接口。

    外观模式由以下几个角色组成:

    1. 外观(Facade):外观对象是客户端与子系统之间的接口。它封装了对子系统的调用,将客户端的请求委派给适当的子系统对象进行处理。
    2. 子系统(Subsystems):子系统是一组类或对象,实现了子系统的功能。外观对象将客户端的请求转发给子系统进行处理。

    下面是一个简单的示例,说明外观模式的使用:

    假设有一个电子商务平台,包含了订单管理、库存管理和支付管理等子系统。每个子系统都有一些复杂的逻辑和接口。为了简化客户端与这些子系统之间的交互,我们可以使用外观模式。

    首先,我们定义一个外观类 OnlineStoreFacade,它包含了订单管理、库存管理和支付管理的接口方法。

    // 外观类
    public class OnlineStoreFacade {
        private OrderManager orderManager;
        private InventoryManager inventoryManager;
        private PaymentManager paymentManager;
    
        public OnlineStoreFacade() {
            orderManager = new OrderManager();
            inventoryManager = new InventoryManager();
            paymentManager = new PaymentManager();
        }
    
        public void placeOrder(String productId, int quantity) {
            // 调用订单管理子系统
            orderManager.createOrder(productId, quantity);
    
            // 调用库存管理子系统
            inventoryManager.updateInventory(productId, quantity);
    
            // 调用支付管理子系统
            paymentManager.processPayment(productId, quantity);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    然后,我们定义订单管理、库存管理和支付管理的子系统类。

    // 订单管理子系统
    public class OrderManager {
        public void createOrder(String productId, int quantity) {
            // 实现创建订单的逻辑
            System.out.println("创建订单:" + productId + ", 数量:" + quantity);
        }
    }
    
    // 库存管理子系统
    public class InventoryManager {
        public void updateInventory(String productId, int quantity) {
            // 实现更新库存的逻辑
            System.out.println("更新库存:" + productId + ", 数量:" + quantity);
        }
    }
    
    // 支付管理子系统
    public class PaymentManager {
        public void processPayment(String productId, int quantity) {
            // 实现支付处理的逻辑
            System.out.println("处理支付:" + productId + ", 数量:" + quantity);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    最后,我们可以通过外观类 OnlineStoreFacade 来简化客户端与子系统之间的交互:

    public class Client {
        public static void main(String[] args) {
            OnlineStoreFacade facade = new OnlineStoreFacade();
            facade.placeOrder("ABC123", 2);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在上述示例中,客户端只需要与外观类 OnlineStoreFacade 进行交互,而不需要了解订单管理、库存管理和支付管理的具体实现细节。外观类将客户端的请求委派给适当的子系统进行处理,从而简化了客户端的代码。

  • 相关阅读:
    sql报错注入和联合注入
    数字与字符串的相互转换——洛谷刷题收获(2023.10.2)
    掌动智能分享:性能压力测试的重要性与优势
    代码随想录-45-102. 二叉树的层序遍历
    关于标准IO缓冲区的问题
    旅游推荐系统
    08【保姆级】-GO语言的函数、包、错误处理
    java开发手册-01编程规约
    Java:三种代理模式示例
    SpringBoot整合Redis
  • 原文地址:https://blog.csdn.net/kkwyting/article/details/133945486