外观模式

适合阅读本专栏的人群包括:

  • 想提升代码质量和架构思维的 Java 开发者
  • 在工作中面对复杂业务、代码难以维护的工程师
  • 想准备面试、系统复习设计模式知识的同学

阅读完本专栏,你将掌握:

  • 23 种设计模式的结构、适用场景和最佳实践
  • 面向对象六大设计原则的使用方式
  • 如何用设计模式解决常见业务场景问题
  • 如何重构低质量代码,提升扩展性与可维护性

任何问题都可以在留言区指出,作者看到后会第一时间回复。
概念总是生僻的,可以结合代码多体会多练习。
如果本文章给你带来一点点收获请点点赞支持一下,谢谢各位架构师,技术专家,专业大拿。
其他模式详解:设计模式入门

外观模式(Facade Pattern)是一种结构型设计模式,它通过为复杂系统提供一个简化的接口,使得客户端能够更加容易地与系统交互。这个模式隐藏了系统的复杂性,为客户端提供了一个更简单的接口。

适用场景

  • 系统内部复杂,希望对外提供简单接口。

  • 隐藏子系统细节,降低客户端耦合。

  • 整合多个子系统,让外部通过一个入口访问。

外观模式的优点

  1. 简化接口:通过提供一个简单的接口,隐藏系统的复杂性,减少了客户端需要处理的对象数量。
  2. 松散耦合:客户端代码与复杂系统的具体实现解耦,使得系统组件可以独立变化而不影响客户端代码。
  3. 更好的分层:有助于划分系统的层次结构,定义系统的入口点。

类图

在这里插入图片描述

代码案例

下面是一个使用外观模式的示例,其中有一个复杂的子系统,它由多个类组成。外观类提供了一个简化的接口,客户端通过这个接口与复杂系统交互。

  • 复杂子系统CPU, Memory, 和 HardDrive 类代表了一个计算机系统的不同组件,每个组件都有自己的复杂操作。

  • 外观类ComputerFacade 类封装了这些组件,并提供了一个简化的接口 start 方法来启动计算机。

  • 客户端代码:客户端通过 ComputerFacade 类的 start 方法与系统交互,隐藏了系统的内部细节。

  1. 复杂子系统

    class CPU {
        public void freeze() {
            System.out.println("CPU freezing...");
        }
    
        public void jump(long position) {
            System.out.println("CPU jumping to position " + position);
        }
    
        public void execute() {
            System.out.println("CPU executing...");
        }
    }
    
    class Memory {
        public void load(long position, byte[] data) {
            System.out.println("Loading data into memory at position " + position);
        }
    }
    
    class HardDrive {
        public byte[] read(long lba, int size) {
            System.out.println("Reading data from hard drive (LBA: " + lba + ", size: " + size + ")");
            return new byte[size];
        }
    }
    
  2. 外观类

    class ComputerFacade {
        private CPU cpu;
        private Memory memory;
        private HardDrive hardDrive;
    
        public ComputerFacade() {
            this.cpu = new CPU();
            this.memory = new Memory();
            this.hardDrive = new HardDrive();
        }
    
        public void start() {
            cpu.freeze();
            memory.load(0x1000, hardDrive.read(0x1000, 1024));
            cpu.jump(0x1000);
            cpu.execute();
        }
    }
    
    
  3. 客户端

    public class Client {
        public static void main(String[] args) {
            ComputerFacade computer = new ComputerFacade();
            computer.start();
        }
    }
    
    

外观模式属于比较好理解的模式,核心在于使用组合的方式将复杂逻辑包装为简单方法对外提供,相信大家即使不了解外观模式也在开发中使用过这种理念了。

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐