小蔡学Java

Java之设计模式 (十六)

2023-09-26 10:20 878 0 设计模式 设计模式外观模式

外观模式(Facade Pattern)

  外观模式是一种结构型设计模式,它提供了一个简单的接口,隐藏了一组复杂的子系统的复杂性,使得客户端可以更容易地使用这个子系统。   外观模式的核心思想是通过提供一个简化的接口,将系统的复杂性封装起来,从而降低系统的耦合性,并使得系统更易于维护和扩展。

使用场景

  • 系统中包含多个模块,每个模块都有自己的接口和实现,需要对外提供一个统一的接口

  • 系统中存在多个复杂的对象或类,需要对外提供简单的接口

  • 需要解耦系统的各个组件,使得它们可以独立变化

  • 需要隔离系统的变化,使得系统的不同模块可以独立变化

代码实现

  一个常见的外观模式的例子是电脑开机过程。在电脑开机的过程中,有许多子系统需要被初始化,例如 CPU、内存、硬盘等等。如果每个子系统都要直接与客户端进行交互,那么客户端的代码会非常复杂。   使用外观模式可以将所有子系统的初始化过程封装到一个简单的接口中,从而使得客户端只需要与外观对象交互,就可以完成所有的初始化过程。

// CPU 子系统
public class CPU {
    public void start() {
        System.out.println("CPU is starting...");
    }
}
// 内存子系统
public class Memory {
    public void start() {
        System.out.println("Memory is starting...");
    }
}
// 硬盘子系统
public class HardDrive {
    public void start() {
        System.out.println("HardDrive is starting...");
    }
}
// 外观类
public class Computer {
    private CPU cpu;
    private Memory memory;
    private HardDrive hardDrive;

    public Computer() {
        cpu = new CPU();
        memory = new Memory();
        hardDrive = new HardDrive();
    }

    // 提供一个简单的接口,封装了所有子系统的初始化过程
    public void start() {
        System.out.println("Computer is starting...");
        cpu.start();
        memory.start();
        hardDrive.start();
        System.out.println("Computer has started...");
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Computer computer = new Computer();
        computer.start();
    }
}

  在这个例子中,CPU、Memory、HardDrive 分别代表电脑开机过程中的 CPU、内存、硬盘子系统,Computer 则是外观类,它封装了所有子系统的初始化过程,提供了一个简单的 start 方法。客户端只需要与 Computer 对象交互即可完成电脑的开机过程,而不需要了解每个子系统的实现细节。

使用小结

  在Java中,外观模式经常被用于封装底层的复杂子系统,提供一个更加简单、易于使用的接口给上层模块调用。

  • JDBC是Java中访问关系型数据库的标准接口,它封装了许多与数据库操作相关的底层细节,使得程序员可以通过简单的接口来进行数据库操作。JDBC的Connection、Statement、ResultSet等接口和类就是外观模式的典型应用,它们提供了一个简单的接口,封装了与数据库底层的交互细节。

  • Spring其中的许多组件都使用了外观模式来隐藏底层的复杂性。例如,Spring中的AOP(面向切面编程)模块提供了一个简单的接口,封装了底层的动态代理、拦截器等复杂细节;Spring中的JDBC模块也提供了一个简单的接口,封装了与数据库操作相关的底层细节。

  • Java网络编程中的Socket类和ServerSocket类也是外观模式的典型应用,它们提供了一个简单的接口,封装了与网络通信相关的底层细节。

  • Java虚拟机中的类加载器、内存管理、线程调度等子系统都是外观模式的典型应用,它们提供了一个简单的接口,封装了与虚拟机底层相关的复杂细节。

评论( 0 )

  • 博主 Mr Cai
  • 坐标 河南 信阳
  • 标签 Java、SpringBoot、消息中间件、Web、Code爱好者