设计模式-门面模式

概述

门面模式的核心思想是什么?
我的理解是:简化上层的调用,屏蔽下层复杂的实现

这种思想是否熟悉?和面向对象编程中的封装 如出一辙,封装 的过程不就是屏蔽某个功能的实现细节,封装 的目的不就是为了简化使用者的调用么(当然还有复用)。

通过封装类或方法,将其包装成一个可复用的逻辑单元。那么从代码层面跳到系统层面,系统和系统之间,是不是天然隔离,自我封装,屏蔽了各自内部的实现细节。

我们在封装某个方法时,如何让调用者能迅速理解该方法的功能,降低学习成本,简化调用呢?提供详细的方法注释是最直观的;

那么系统或者服务之间,如何简化调用呢?为系统提供简单的调用入口呗(门面模式)


门面模式组成

门面类:调用者的访问入口,包含若干个子系统的引用。

子系统:某个系统或者模块,通过门面类,子系统和调用者解耦(所以门面模式是防腐层设计的实现方式之一)

场景

其实你一直在用门面模式,比如你负责的服务是专门对接第三方平台。伪代码如下:

java 复制代码
// 1.接入
public class CompanyFacade implement ICompanyInfo{
	public Obj getCompanyInfo(String name){
		initConfig();// 鉴权
		buildParams();// 参数处理
		invokeApi();// 调用第三方api
		processResp();// 处理响应
	}
}
// 2.其他系统服务调用
Object obj = companyInfo.getCompanyInfo("666");

CompanyFacade门面类就是企业信息对接过程的一个外观/门面:屏蔽对接细节,对外提供简化易用的接口。

再举个例子:屏蔽计算机的启动细节,提供一个启动的方法

java 复制代码
// 子系统 - CPU
class CPU {
    void start() {
        System.out.println("CPU 启动");
    }
}
// 子系统 - 内存
class Memory {
    void load() {
        System.out.println("内存加载");
    }
}
// 子系统 - 硬盘
class HardDrive {
    void read() {
        System.out.println("硬盘读取");
    }
}
// 外观类
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.start();
        memory.load();
        hardDrive.read();
        System.out.println("计算机启动完成");
    }
}
// 客户端
public class StartButton {
    public static void main(String[] args) {
        // 通过外观类启动计算机
        ComputerFacade computerFacade = new ComputerFacade();
        computerFacade.start();
    }
}

思考

系统是一个黑盒,门面(或外观)则是直观的,且易于理解;门面是对外的,代表门面类所在的服务或系统。基于此,可以帮助记忆门面模式的作用:为门面类所在的系统提供简单的调用入口。

相关推荐
AI人工智能+电脑小能手1 小时前
大白话说Java设计模式-43-访问者模式(源码剖析篇)
java·设计模式·访问者模式·源码分析·elementvisitor·asm classvisitor·spring spel
Michael_lcf16 小时前
Agent设计模式:思考-行动-观察循环的本质与局限
设计模式·agent设计模式·agent设计模式的本质
丰锋ff17 小时前
设计模式学习笔记
笔记·学习·设计模式
米啦啦.18 小时前
设计模式/
观察者模式·单例模式·设计模式·工厂模式
QuZhengRong20 小时前
【AI】Agent 全栈进阶|Agent 设计模式
人工智能·学习·设计模式·llm·agent
码匠许师傅21 小时前
【设计模式精讲】2. 设计原则基石:SOLID 与几条关键原则
java·设计模式·log4j
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-41-备忘录模式(源码剖析篇)
java·设计模式·备忘录模式·源码分析·serializable·undo log·spring statemachine
yinchnag1 天前
CRTP:奇异递归模板模式在 Go 模块系统中的实现
设计模式·go
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-40-备忘录模式(业务实战篇)
java·设计模式·事务回滚·备忘录模式·状态保存·spring transactional·购物车快照
bryant_meng2 天前
【Codex】Part 19 — Codex Prompt Design Patterns
设计模式·prompt·playbook·结果优先·用证据定义完成