技术成神之路:设计模式(二十一)外观模式

一文搞懂电流、电压的有效值 RMS 交流电有正半周、负半周,直接平均可能抵消成 0,但负半周一样会发热。这个交流电如果换成直流电,能产生同样发热功率时,对应的直流电压或电流”,电容耐压通常不能按 220V 选,常见会选 400V 或更高余量。所以做硬件时,220VAC 整流滤波后电容上会接近。电压/电流的有效值,也叫。如果它加在电阻上,发热按。 阅读详情

在这里插入图片描述
相关文章:技术成神之路:二十三种设计模式(导航页)

介绍

外观模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供一个统一的接口。外观模式定义了一个高层接口,使得子系统更容易使用。

1. 定义


外观模式通过引入一个外观类,来简化与复杂系统的交互。这个外观类对外提供一个简单接口,而系统内部的复杂性被封装在外观类后面。

2. 主要作用


  • 简化接口: 为子系统提供一个简单的接口,降低使用难度。
  • 解耦子系统: 让客户端不需要了解子系统的复杂实现,减少客户端与子系统之间的依赖。
  • 提高灵活性和扩展性: 通过外观模式实现系统的模块化,使得系统更易于扩展和维护。

3. 解决的问题


外观模式主要用来解决复杂系统的使用难题。通过提供一个统一的接口,隐藏系统的复杂性,使得客户端可以更简单地进行操作。

4. 模式原理


包含角色:

  1. 外观角色(Facade):定义了一个高层接口,提供与多个子系统的交互方法。
  2. 子系统角色(Subsystem Classes):各个子系统实现具体的功能,外观类通过这些子系统来完成用户的请求。

UML类图:
在这里插入图片描述
代码示例:

// 子系统类
class Computer {
    public void start() {
        System.out.println("Computer starting...");
    }
    public void shutdown() {
        System.out.println("Computer shutting down...");
    }
}

class Monitor {
    public void turnOn() {
        System.out.println("Monitor turning on...");
    }
    public void turnOff() {
        System.out.println("Monitor turning off...");
    }
}

class Keyboard {
    public void connect() {
        System.out.println("Keyboard connected.");
    }
    public void disconnect() {
        System.out.println("Keyboard disconnected.");
    }
}

// 外观类
class ComputerFacade {
    private Computer computer;
    private Monitor monitor;
    private Keyboard keyboard;

    public ComputerFacade() {
        this.computer = new Computer();
        this.monitor = new Monitor();
        this.keyboard = new Keyboard();
    }

    public void start() {
        keyboard.connect();
        monitor.turnOn();
        computer.start();
    }

    public void shutdown() {
        computer.shutdown();
        monitor.turnOff();
        keyboard.disconnect();
    }
}

调用.

public class FacadePatternDemo {
    public static void main(String[] args) {
        ComputerFacade computerFacade = new ComputerFacade();
        
        // 启动计算机
        computerFacade.start();
        
        // 关闭计算机
        computerFacade.shutdown();
    }
}

打印输出

Lights turned on
Engine started
Music playing
Music stopped
Engine stopped
Lights turned off

外观模式挺容易理解的,原理也很简单,像不像Java的封装,把细节封装在类的内部,只给外部提供想给他的接口调用。

不知道你在开发中有没有注意,我们所使用到的大部分三方库,都通过提供一个管理类来简化用户的调用过程,其内部复杂的细节让用户感知不到,总之就是让用户用起来方便,一个字 “爽”!其原理也是运用了外观模式(Facade Pattern)的原则。所以说,如果你要开发第三方库,设计模式的运用是必不可少的,是基础也是灵魂。

经典案例:

在Java中,ApplicationContext 是一个外观类,提供了对不同Spring功能(如Bean管理、事务管理等)的简化访问。开发者可以通过它快速访问和管理Spring容器中的Beans,而不需要了解每个子系统的复杂性。

在安卓中,使用MediaPlayer播放音频时,开发者只需调用几个简单的方法,如setDataSource()、prepare()、start(),而不需要了解音频播放的底层实现。

5. 优缺点


优点

  • 简化使用:提供简单接口,降低学习成本。
  • 解耦合:降低客户端与子系统之间的耦合度。
  • 灵活性:方便对子系统进行修改和扩展。

缺点

  • 可能的性能问题:引入额外的调用可能增加性能开销。
  • 过度简化风险:可能导致系统功能细节的丢失。

6. 应用场景


  • 复杂系统:需要对外提供简单接口的复杂系统。
  • 第三方库使用:对复杂的第三方库进行封装。
  • 模块化开发:需要降低模块之间的依赖。

7. 总结


外观模式在简化复杂系统的使用和降低系统耦合度方面发挥了重要作用。通过提供一个高层接口,外观模式隐藏了复杂的实现细节,使得系统更加易于理解和使用。虽然存在一些潜在的性能问题,但在合理的应用场景下,外观模式能够显著提高系统的可维护性和灵活性。

将Keil中的变量数组导出 首先,写好导出数据的函数。 阅读详情

相关推荐

.NET MAUI 第13讲 深入探索 .NET MAUI Essentials:让应用感知设备与环境,打造智能体验

摘要:本文介绍了.NET MAUI Essentials库如何赋能移动应用感知设备环境的能力。文章详细讲解了设备信息获取(DeviceInfo)、网络状态监测(Connectivity)、地理位置服务(Geolocation)、地图集成(Map)以及传感器(Accelerometer等)等核心功能的使用方法,并提供了完整的代码示例。通过一个综合练习,展示了如何构建设备信息仪表板,实时显示设备参数和网络状态,并实现位置获取与地图导航功能。这些跨平台API能显著提升应用智能化和用户体验,同时保持代码简洁高效。

AlphaNil的博客 1088

Java成神路上之设计模式系列教程之一

Java成神路上之设计模式系列教程之一 千锋-Feri 在Java工程师的日常中,是否遇到过如下问题: Java 中什么叫单例设计模式?请用Java 写出线程安全的单例模式? 什么是设计模式?你是否在你的代码里面使用过任何设计模式? 解释下什么是观察者模式? 使用工厂模式最主要的好处是什么?在哪里使用? 等等相关的问题,那么问题来了,究竟什么是设计模式,它与我们又有什么关系?在我们的...

qfchenjunbo的博客 130

基于EtherCAT的AM402与SV660N、IS620N伺服运动控制实战指南

本文详细介绍了基于EtherCAT总线的汇川AM402 PLC与SV660N、IS620N伺服驱动器构建运动控制系统的完整实战流程。内容涵盖硬件平台搭建、软件组态、关键参数设置、InoProShop编程及调试技巧,旨在帮助工程师快速掌握这一高精度、高响应的工业自动化解决方案。

weixin_29204205的博客 401

技术成神之路:二十三种设计模式(导航页)

设计原则/模式 链接 面向对象的六大设计原则 技术成神之路:面向对象的六大设计原则 创建型模式 单例模式 建造者模式 原型模式 工厂方法模式 抽象工厂模式 行为型模式 策略模式 状态模式 责任链模式 观察者模式 备忘录模式 迭代器模式 模板方法模式 访问者模式 结构型模式 享元模式 中介者模式 代理模式 组合模式 适配器模式 桥接模式 装饰模式 外观

WriteBug001的博客 587

AR-HMM模型 自回归隐马尔可夫模型

AR-HMM模型 自回归隐马尔可夫模型 数据处理过程 输入的视频数据首先需要被裁剪以适合动物的大小,在这之后考虑到模型建立的目的为行为状态的分类,于是需要消除可能一帧里带有多个动作状态的行为成分,这个过程也就是对帧。对帧之后我们的为了适应模型训练还需要对每一帧的数据进行小波分解(类似傅里叶变换的信号重构),此时数据预处理阶段完成。 信号重构后的数据拥有的特征维度过多,因此需要应用主成分分析法(PCA)来选出对于分类结果贡献度最高的前十个分类特征。至此自回归隐马尔可夫模型的准备工作就完成了。 AR-HMM自

weixin_46263718的博客 2284

慕课软件质量保证与测试(习题集)

慕课金陵科技学院.软件质量保证与测试.期末复习.习题汇总0 总目录1 绪论1.1 软件质量保证与测试的产生与发展1.2 软件缺陷,软件错误,软件故障1.3 软件质量保证与测试的意义,原则和挑战1.4 单元测试1.5 课后作业2 软件测试策略2.1 软件测试的模型,过程和生命周期2.2 软件测试的方法和技术2.3 单元测试2.4 课后作业3 黑盒测试3.1 黑盒测试概述3.2 等价类划分测试3.3 边界值测试3.4 错误推测法3.5 判定表驱动法3.6 因果图法3.7 场景法3.8 正交实验法3.9 单元测试

weixin_42473228的博客 5万+

CMap分子指纹搜索引擎:从基因表达向量到药物重定位

CMap(Connectivity Map)是一种基于基因表达谱的高维生物信息检索系统,其核心是将化合物转化为978个标志性基因的z-score向量,通过线性代数运算(如加权余弦相似度)实现跨扰动条件的生物学关联匹配。它不依赖SQL或传统数据库架构,而是以HDF5张量格式存储、以L1000平台标准化数据为基石,支撑药物重定位、通路机制解析与多组学验证等关键科研任务。作为药理学与计算生物学交叉的典型范式,CMap已成为小分子功能注释、老药新用发现及单细胞数据解读的重要基础设施,广泛应用于抗纤维化、抗肿瘤及炎症

weixin_34411563的博客 405

基于Simulink的H∞鲁棒控制器设计与仿真建模示例

本文介绍了基于Simulink的H∞鲁棒控制器设计与仿真方法。针对质量-弹簧-阻尼系统存在±50%刚度不确定性的问题,详细阐述了从构建广义被控对象、设计性能加权函数,到使用hinfsyn综合控制器的完整流程。通过Simulink仿真验证,所设计的H∞控制器在参数摄动和外部扰动下均保持良好性能,位移控制误差小于2%,扰动衰减超过20dB。相比传统PID控制,H∞方法展现出显著鲁棒性优势。文章还总结了工程实践中的加权函数调参技巧、控制器降阶方法,并展望了μ-综合等扩展方向,为处理系统不确定性提供了实用解决方案。

amy_mhd的博客 70

gpio的8种工作模式_Java成神路上之设计模式系列教程之一

Java成神路上之设计模式系列教程之一千锋-Feri在Java工程师的日常中,是否遇到过如下问题:Java 中什么叫单例设计模式?请用Java 写出线程安全的单例模式?什么是设计模式?你是否在你的代码里面使用过任何设计模式?解释下什么是观察者模式?使用工厂模式最主要的好处是什么?在哪里使用?等等相关的问题,那么问题来了,究竟什么是设计模式,它与我们又有什么关系?在我们的日常开发中充当什么样的作用?...

weixin_39739404的博客 102

2.0 电子凸轮 西门子1500电子凸轮使用研究1

本文研究了S7-1500T电子凸轮同步控制技术,通过仿真实验得出以下结论:1)通过比例系数可调整凸轮曲线形状;2)解除同步需调用从轴其他运动指令;3)详细阐述了凸轮同步的5个实施步骤。重点分析了三种同步类型(主值距离同步、动态参数同步和直接同步)的特点及应用场景,并探讨了缩放系数、偏移量等参数对凸轮曲线的影响。同时介绍了凸轮应用模式及常见异常处理方法,为工程应用提供了重要参考。

qq_34047402的博客 809

虚拟网络的“隐形盾”:C#如何用代码把DDoS踢出门?

本文分享了如何用C#防御DDoS攻击的实战经验。通过三种核心防御策略:1)基于IP的速率限制中间件,使用滑动时间窗口算法控制请求流量;2)自动IP封禁服务,通过特征检测识别恶意IP并加入黑名单;3)优化数据库连接池和HTTP客户端连接池,合理配置资源参数。文中提供了详细的C#代码实现,包括限流中间件、IP封禁服务和连接池优化方案,并分享了生产环境中的调优经验,如配合Redis实现分布式限流、使用fail2ban自动封禁等技巧,帮助开发者构建更健壮的防御体系。

墨夶的博客 329

夜光带你走进 Java 成神之路(二十四)擅长的领域

夜光序言: 时间没有等我,是你忘了带我走,我左手过目不忘的的萤火,右手里是十年一个漫长的打坐。 正文: 以道御术 / 以术识道 我们可以结合 HashMap看组合模式   1、抽象构件:总的抽象类或者接口,定义一些通用的方法,比如新增、删除。...

夜光的博客 236

VisionPro 机器视觉案例 之 彩色保险丝个数统计

CogColorSegmenterTool CogColorMatchTool

机器视觉李小白的博客 2353

耗时两月!20+真实案例场景、近300页、18W字,这份【Java设计模式实践指南】已然成神,堪称经典

什么是设计模式?这个问题我问过的面试者不下于数十次,回答五花八门。 在我看来,模式就是经验,设计模式就是设计经验,有了这些经验,我们就能在特定情况下使用特定的设计、组合设计,这样可以大大节省我们的设计时间,提高工作效率。 作为一个工作已久的老码农,经历的系统架构设计也算不少,接下来,我会把工作中用到的一些架构方面的设计模式总结成了一个文档分享给大家,望大家少走弯路。 创建者模式(五种) 工厂方法模式 工厂模式又称工厂方法模式,是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象

资料免费分享,点击名片 392

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

教你快速学会设计模式

附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全: 书单导航页(点击右侧 极客侠栈 即可打开个人博客):极客侠栈 ①【Java】学习之路吐血整理技术书从入门到进阶最全50+本(珍藏版) ②【算法数据结构+acm】从入门到进阶吐血整理书单50+本(珍藏版) ③【数据库】从入门到进阶必读18本技术书籍网盘吐血整理网盘(珍藏版) ④【Web前端】从HT...

黑技的博客 428

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【JavaEE】单例模式和阻塞队列

阻塞队列是Java并发编程中一个非常重要的概念,它提供了一种线程安全且高效的机制来管理多线程环境下的任务调度和资源分配。通过选择合适的阻塞队列类型,可以有效地控制并发级别,提高系统的响应能力和吞吐量。

2302_79806056的博客 1372

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

史上超级详细:Java岗面试12家大厂成功跳槽,附项目源码

前言 很多Java程序员一直希望找到一份完整的学习路径,但是市面上很多书都是专注某一个领域的,没有一份完整的大图,以至于很多程序员很迷茫,不知道自己到底应该从哪里开始学,或者不知道自己学习些什么。 好在,很早之前就有一位阿里巴巴的技术专家总结了一份**《Java工程师成神之路》**,作者按照自己的经验总结了从基础,到高级、底层、架构、进阶、扩展等6个大的章节。几乎囊括了Java体系内的所有知识点。 这份资料之前开源在GitHub上,短短几个月时间,收获了15k+的Star数,最近,笔者了解到,该项目有了重大

m0_57286622的博客 165

一篇文章把InnoDB的事务机制给你弄的明明白白,高级面试题+解析

前言 很多Java程序员一直希望找到一份完整的学习路径,但是市面上很多书都是专注某一个领域的,没有一份完整的大图,以至于很多程序员很迷茫,不知道自己到底应该从哪里开始学,或者不知道自己学习些什么。 好在,很早之前就有一位阿里巴巴的技术专家总结了一份**《Java工程师成神之路》**,作者按照自己的经验总结了从基础,到高级、底层、架构、进阶、扩展等6个大的章节。几乎囊括了Java体系内的所有知识点。 这份资料之前开源在GitHub上,短短几个月时间,收获了15k+的Star数,最近,笔者了解到,该项目有了重大

m0_56710876的博客 335

怎样设计一个好架构:八个评价维度、四层思考深度,以及 23 种设计模式各自解决什么问题

架构要解决的是变化、理解、故障和协作的成本。本文从耦合、可迁移、可适配、复杂度等八个维度讲怎么评价架构,讲维度之间怎么取舍、架构思考可以分几层,再用可编译的 C 代码过一遍 23 种设计模式。

weixin_52400878的博客 334

访问者模式详解

汇总目录请点击访问:《设计模式目录汇总》 喜欢内容的话欢迎关注、点赞、收藏!感谢支持,祝大家祉猷并茂,顺遂无虞!

2601_96797912的博客 21

Agent Skill 五大设计模式:从工程实践到落地指南

Skill 不是一段临时 Prompt,而是一个可复用、可测试、可迭代的任务流程模板。通常通过SKILL.mdWhen:什么情况下触发How:按什么步骤执行What:最终输出什么:哪些行为必须遵守、哪些行为禁止fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;用户意图Skill 路由工具调用 / MCP / API结构化输出检查与交付。

m0_62458145的博客 211

设计模式之状态模式

状态模式是一种行为型设计模式,通过将对象的不同状态行为封装到独立的状态类中,使上下文对象在状态变化时自动切换行为。以外卖订单为例,不同状态(如待支付、配送中)对同一操作(如取消)有不同响应。状态模式避免了复杂的if/else判断,提升代码可维护性与扩展性。其核心由上下文(Order)、状态接口(OrderState)和具体状态类组成,通过委托机制实现状态间的平滑切换。

FallingGod的博客 166

设计模式速查

本文梳理12个核心设计模式,涵盖创建型、结构型与行为型,提供简洁Java实现与面试要点。重点解析单例(静态内部类)、工厂(方法/抽象)、建造者(链式构建)等高频模式,强调代码可维护性与扩展性,附速记口诀与对比表格,助力开发与面试双提升。

ttlovet的博客 174

设计模式(unity游戏研发版)

当你使用图形用户界面类时通常会遇到一个问题。比如,你创建了自定义按钮类并允许客户端在按钮中注入自定义代码,这样当用户按下按钮时就会触发这些代码。观察者模式允许任何实现了订阅者接口的对象订阅发布者对象的事件通知。你可在按钮中添加订阅机制,允许客户端通过自定义订阅类注入自定义代码。在Unity中,这就像UnityEvent在Inspector中绑定多个回调。

m0_63330263的博客 103
上一篇: C++基础
下一篇: 技术成神之路:设计模式(二十二)命令模式
_蓝橙
博客等级 码龄7年 1179粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值