• 设计模式:外观模式


    外观模式是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式隐藏了子系统的复杂性,使得客户端能够更简单地使用子系统的功能。

    外观模式的核心思想是将复杂的子系统封装在一个外观类中,客户端只需要与外观类进行交互,而不需要直接与子系统的各个组件进行交互。外观类充当了客户端与子系统之间的中间层,简化了客户端的操作过程。

    通过外观模式,客户端可以通过调用外观类的方法来完成一系列复杂的操作,而无需了解子系统内部的具体实现细节。外观模式提供了一种简单、直观的接口,使得客户端能够更方便地使用子系统的功能。

    组件

    1. 子系统类:子系统中的具体类或对象,负责完成特定的功能或任务。
    2. 外观类:外观模式的核心,封装了子系统的组件,并提供简化的接口给客户端使用。
    3. 客户端:使用外观模式的代码,通过外观类来访问子系统的功能,而不需要直接与子系统的组件进行交互。
    4. 接口:子系统中的各个组件可能会定义接口,用于定义其行为和规范。
    5. 工具类:在外观模式中,可能会使用一些工具类来辅助封装和管理子系统的组件。

    代码实例

    // 子系统类A
    class SubsystemA {
        public void operationA() {
            System.out.println("SubsystemA operation");
        }
    }
     // 子系统类B
    class SubsystemB {
        public void operationB() {
            System.out.println("SubsystemB operation");
        }
    }
     // 外观类
    class Facade {
        private SubsystemA subsystemA;
        private SubsystemB subsystemB;
         public Facade() {
            subsystemA = new SubsystemA();
            subsystemB = new SubsystemB();
        }
         public void operation() {
            subsystemA.operationA();
            subsystemB.operationB();
        }
    }
     // 客户端代码
    public class Main {
        public static void main(String[] args) {
            Facade facade = new Facade();
            facade.operation();
        }
    }
    
    • 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

    在上面的示例中,我们有两个子系统类(SubsystemA和SubsystemB),它们分别实现了不同的操作。然后我们创建了一个外观类(Facade),它封装了这两个子系统,并提供了一个简化的接口给客户端使用。最后,在客户端代码中,我们通过实例化外观类并调用其操作方法来使用外观模式。

    这个示例展示了外观模式如何通过封装子系统的复杂性,提供一个简化的接口给客户端使用。客户端只需要与外观类交互,而不需要直接与子系统的组件进行交互。

    源码中应用

    在源码中,外观模式有很多应用场景。以下是一些常见的源码中应用外观模式的情况:

    1. Java标准库中的类:

      • java.util.Collections类提供了一系列静态方法,封装了对集合的常见操作,如排序、查找等。
      • javax.servlet.http.HttpServlet类封装了处理HTTP请求的方法,简化了开发Web应用的过程。
    2. Spring框架中的类:

      • org.springframework.jdbc.core.JdbcTemplate类封装了与数据库交互的方法,简化了数据库操作的流程。
      • org.springframework.web.servlet.DispatcherServlet类作为前端控制器,封装了处理HTTP请求的逻辑,简化了Web应用的开发。

    优缺点

    优点:

    1. 简化客户端使用:外观模式提供了一个简化的接口给客户端使用,隐藏了子系统的复杂性,使得客户端更容易理解和使用。
    2. 解耦子系统和客户端:外观模式将子系统与客户端解耦,使得它们可以独立演化,互不影响。
    3. 提高代码的可维护性:通过外观模式,将复杂的子系统封装在一个外观类中,使得系统更易于维护和修改。

    缺点:

    1. 不符合开闭原则:当需要修改或添加子系统的功能时,可能需要修改外观类,违背了开闭原则。
    2. 增加了类的数量:引入外观模式会增加一个外观类,可能会导致类的数量增加,增加了系统的复杂性。

    总结

    外观模式通过封装子系统的复杂性,提供了一个简化的接口给客户端使用。它简化了客户端的操作过程,提高了代码的可维护性。然而,使用外观模式需要权衡其优点和缺点,确保合理使用。

  • 相关阅读:
    基层管理者的思考方式
    还在写SQL做SAP二开?通过RFC调用NetWeaver,让HANA数据库操作更可靠
    QRC:extract RC流程
    3D全景技术,为我们打开全新宣传领域
    HTML5新增的input元素属性:placeholder、required、autofocus、min、max等
    【Docker、Portainer】Docker可视化的容器镜像的图形管理工具(推荐)(基本介绍)
    VASA-1:实时音频驱动的数字人说话面部视频生成技术
    Android 9.0 屏蔽设备的WLAN功能
    卡尔曼及扩展卡尔曼滤波详细推导-来自DR_CAN视频
    《前端运维》一、Linux基础--05Shell运算符
  • 原文地址:https://blog.csdn.net/qq_27586963/article/details/132945598