Linux C++ 054-设计模式之外观模式
Linux C++ 054-设计模式之外观模式
本节关键字:Linux、C++、设计模式、外观模式
相关库函数:
概念
外观模式(Facade),亦称“过程模式”。主张按照描述和判断资料来评价课程,关键的活动是在课程实施的全过程中进行观察和搜集意见,以了解人们对课程的不同看法。这种模式不限于检查教学的成果,重视描述和判断教学过程中各种复杂、动态的现象和事物。
结构
Facade
这个外观类为子系统提供一个共同的对外接口
Clients
客户对象通过一个外观接口读写子系统中各接口的数据资源。
使用场景
在以下情况下可以考虑使用外观模式:
1、设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。
2、开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。
3、维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。
优点
1、实现了子系统与客户端之间的松耦合关系。
2、客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。
代码示例
// 为系统的一组接口提供一致的界面,使用户使用起来更加方便
// 外观模式的适用情况:
// 设计初期,有意识地将不同的层分离,层与层之间建立外观模式
// 开发阶段,子系统越来越复杂,使用外观模式创建一个简单的调用接口
// 现有的系统可能已经非常难以维护和扩展,但很多功能由十分重要,可以为其创建一个外观类,使得新系统可以方便的与其交互
// 优点:
// 实现了子系统和客户端松耦合的关系
// 客户端屏蔽了子系统的组件,减少了客户端所需处理的数据,使得子系统使用起来更加容易
// 更好的划分了设计层次,使后期的维护更加方便
// 实例:
// 当开电脑时,需要启动主机,显示器,外部设备等一系列的子部件,我们封装一个外观类,
// 调用外观类的启动接口可以将这一系列的子部件全部打开,这个外观类就好比电脑的开机按钮。关闭的思想也是同样
//
// 抽象控件类,提供接口
class Control
{
public:virtual void start() = 0;virtual void shutdown() = 0;
};
// 子控件,主机
class Host : public Control
{
public:void start() override {cout << "Host start" << endl;}void shutdown() override {cout << "Host shutdown" << endl;}
};
// 子控件,显示屏
class LCDDisplay : public Control
{
public:void start() override {cout << "LCD Display start" << endl;}void shutdown() override {cout << "LCD Display shutdown" << endl;}
};
// 子控件,外部设备
class Peripheral : public Control
{
public:void start() override {cout << "Peripheral start" << endl;}void shutdown() override {cout << "Peripheral shutdown" << endl;}
};
class ComputerFacade
{
public:void start() {m_host.start();m_display.start();m_peripheral.start();cout << "Computer start" << endl;}void shutdown() {m_host.shutdown();m_display.shutdown();m_peripheral.shutdown();cout << "Computer shutdown" << endl;}
private:Host m_host;LCDDisplay m_display;Peripheral m_peripheral;
};
int main_Facade()
{ComputerFacade computer;computer.start();computer.shutdown();return 0;
}
/* 输出结果:
Host start
LCD Display start
Peripheral start
Computer start
Host shutdown
LCD Display shutdonw
Peripheral shutdown
Computer shutdown
*/
相关文章:
Linux C++ 054-设计模式之外观模式
Linux C 054-设计模式之外观模式 本节关键字:Linux、C、设计模式、外观模式 相关库函数: 概念 外观模式(Facade),亦称“过程模式”。主张按照描述和判断资料来评价课程,关键的活动是在课程实施的全过程中…...
Linux - 冯-诺依曼体系结构、初始操作系统
目录 冯•诺依曼体系 结构推导 内存提高效率的方法 数据的流动过程 体系结构相关知识 初始操作系统 定位 设计目的 操作系统之上之下分别有什么 管理精髓:先描述,再组织 冯•诺依曼体系 结构推导 计算机基本工作流程图大致如下: 输入设备&a…...
成功适配!极验设备指纹HarmonyOS 鸿蒙版官方下载
近日,华为开发者大会(HDC 2024)在东莞召开。在大会开幕日的首场主题演讲中,华为宣布当前已有TOP5000应用成为鸿蒙原生应用,350+SDK已适配HarmonyOS NEXT版本。其中,极验作为其重要伙伴ÿ…...
【C++】字符串学习 知识点+代码记录
一.知识点总结 1. C风格字符串(字符数组) 字符数组存储字符串:C风格的字符串实际上是字符数组,以空字符\0作为结尾标志。字符串字面量与字符数组:字符串字面量如"Hello"被编译器视为const char*类型&#…...
尝试理解docker网络通信逻辑
一、docker是什么 Docker本质是一个进程,宿主机通过namespace隔离机制提供进程需要运行基础环境,并且通过Cgroup限制进程调用资源。Docker的隔离机制包括 network隔离,此次主要探讨网络隔离mount隔离hostname隔离user隔离pid隔离进程通信隔离 二、doc…...
数据仓库哈哈
数据仓库 基本概念数据库(database)和数据仓库(Data Warehouse)的异同 整体架构分层架构方法论ER模型(建模理论)维度模型 何为分层第一层:数据源(ODS ER模型)设计要点日志…...
K最近邻(K-Nearest Neighbors, KNN)
K最近邻(K-Nearest Neighbors, KNN)理论知识推导 KNN算法是一个简单且直观的分类和回归方法,其基本思想是:给定一个样本点,找到训练集中与其最近的K个样本点,根据这些样本点的类别(分类问题&am…...
深度学习损失计算
文章目录 深度学习损失计算1.如何计算当前epoch的损失?2.为什么要计算样本平均损失,而不是计算批次平均损失? 深度学习损失计算 1.如何计算当前epoch的损失? 深度学习中的损失计算,通常为数据集的平均损失࿰…...
论文翻译:通过云计算对联网多智能体系统进行预测控制
通过云计算对联网多智能体系统进行预测控制 文章目录 通过云计算对联网多智能体系统进行预测控制摘要前言通过云计算实现联网的多智能体控制系统网络化多智能体系统的云预测控制器设计云预测控制系统的稳定性和一致性分析例子结论 摘要 本文研究了基于云计算的网络化多智能体预…...
Java核心(五)多线程
线程并行的逻辑 一个线程问题 起手先来看一个线程问题: public class NumberExample {private int cnt 0;public void add() {cnt;}public int get() {return cnt;} }public static void main(String[] args) throws InterruptedException {final int threadSiz…...
IDEA快速生成项目树形结构图
下图用的IDEA工具,但我觉得WebStorm 应该也可以 文章目录 进入项目根目录下,进入cmd输入如下指令: 只有文件夹 tree . > list.txt 包括文件夹和文件 tree /f . > list.txt 还可以为相关包路径加上注释...
【CPO-TCN-BiGRU-Attention回归预测】基于冠豪猪算法CPO优化时间卷积双向门控循环单元融合注意力机制
基于冠豪猪算法CPO(Correlation-Preservation Optimization)优化的时间卷积双向门控循环单元(Bidirectional Gated Recurrent Unit,BiGRU)融合注意力机制(Attention)的回归预测需要详细的实现和…...
面试高级 Java 工程师:2024 年的见闻与思考
面试高级 Java 工程师:2024 年的见闻与思考 由于公司业务拓展需要,公司招聘一名高级java工程研发工程师,主要负责新项目的研发及老项目的维护升级。我作为一名技术面试官,参与招聘高级 Java 工程师,我见证了技术领域的…...
设计模式大白话之装饰者模式
想象一下,你走进一家咖啡馆,点了一杯美式咖啡。但是,你可能还想根据自己的口味添加一些东西,比如奶泡、巧克力粉、焦糖酱或是肉桂粉。每次你添加一种配料,你的咖啡就会变得更丰富,同时价格也会相应增加。 在…...
动手学深度学习6.3 填充和步幅-笔记练习(PyTorch)
以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。 本节课程地址:填充和步幅_哔哩哔哩_bilibili 代码实现_哔哩哔哩_bilibili 本节教材地址:6.3. 填充和…...
函数的形状怎么定义?
在TypeScript中,函数的形状可以通过多种方式定义,以下是几种主要的方法: 1、函数声明:使用function关键字声明函数,并直接在函数名后的括号内定义参数,通过冒号(:)指定参数的类型&a…...
Windows 虚拟机服务器项目部署
目录 一、部署JDK下载JDK安装JDK1.双击 jdk.exe 安装程序2.点击【下一步】3.默认安装位置,点击【下一步】4.等待提取安装程序5.默认安装位置,点击【下一步】6.等待安装7.安装成功,点击【关闭】 二、部署TomcatTomcat主要特点包括:…...
JDBC(2)基础篇2——增删改查及常见问题
目录 一、基于PreparedStatement实现CRUD 1.查询单行单列 2.查询单行多列 3.查询多行多列 4.新增 5.修改 6.删除 7.总结 二、常见问题 1.资源的管理 2.SQL语句问题 3.SQL语句未设置参数问题 4.用户名或密码错误问题 5.通信异常 总结 一、基于PreparedStatement实…...
JVM知识点梳理
目录标题 1.类加载机制1.1 Java 运行时一个类是什么时候被加载的?1.2 JVM 一个类的加载过程?1.3 一个类被初始化的过程?1.4 继承时父子类的初始化顺序是怎样的?1.5 究竟什么是类加载器?1.6 JVM 有哪些类加载器?1.7 JVM 中不同的类加载器加载哪些文件?1.8 JVM 三层类加载…...
产品经理-一份标准需求文档的8个模块(14)
一份标准优秀的产品需求文档包括: ❑ 封面; ❑ 文档修订记录表; ❑ 目录; ❑ 引言; ❑ 产品概述:产品结构图 ❑ 详细需求说明:产品逻辑图、功能与特性简述列表、交互/视觉设计、需求详细描述&am…...
伺服电机电流环PI参数整定:从数学模型到工程实践
1. 项目概述:高带宽电流环设计的核心价值在伺服电机控制领域,追求极致的动态响应和稳态精度,是所有工程师的终极目标。上一期我们聊透了EtherCAT如何通过精准的同步信号(Sync)为整个控制系统打下坚实的时间基准&#x…...
YOLO26 ONNX Runtime 部署实战:告别NMS后处理,边缘推理新标杆
🚀 YOLO26 ONNX Runtime 部署实战:告别NMS后处理,边缘推理新标杆 摘要: Ultralytics 重磅推出的 YOLO26 不仅在精度上实现了代际飞跃,更在架构层面进行了颠覆性革新——彻底移除了传统的 NMS(非极大值抑制)后处理环节。本文将带你深入了解 YOLO26 的核心优势,并基于 …...
从一次失败的App上线,看我们如何用PDCA循环在3个月内实现用户留存翻倍
从一次失败的App上线,看我们如何用PDCA循环在3个月内实现用户留存翻倍 去年夏天,我们的团队经历了一次刻骨铭心的产品滑铁卢——一款投入半年研发的社交类App在上线首周就遭遇了用户留存率暴跌至8%的危机。这个数字远低于行业平均25%的水平线,…...
Midjourney印象派商业级应用白皮书(含版权合规清单):广告/出版/IP衍生必备的5类授权边界判定法
更多请点击: https://kaifayun.com 第一章:Midjourney印象派商业级应用白皮书导论 Midjourney 不仅是生成式AI图像工具,更是一种可嵌入品牌视觉系统、广告创意链路与数字内容工业化流程的视觉协作者。其“印象派”风格能力——强调光色律动、…...
5分钟快速上手:如何为Windows安装程序添加简体中文界面支持
5分钟快速上手:如何为Windows安装程序添加简体中文界面支持 【免费下载链接】Inno-Setup-Chinese-Simplified-Translation :earth_asia: Inno Setup Chinese Simplified Translation 项目地址: https://gitcode.com/gh_mirrors/in/Inno-Setup-Chinese-Simplified-…...
如何让老旧Windows系统重新获得安全更新:Legacy Update完整解决方案
如何让老旧Windows系统重新获得安全更新:Legacy Update完整解决方案 【免费下载链接】LegacyUpdate Get back online, activate, and install updates on your legacy Windows PC 项目地址: https://gitcode.com/gh_mirrors/le/LegacyUpdate 还在为Windows X…...
探索AI编程工具的民主化:从技术壁垒到开源共享的技术演进之路
探索AI编程工具的民主化:从技术壁垒到开源共享的技术演进之路 【免费下载链接】cursor-vip cursor IDE enjoy VIP 项目地址: https://gitcode.com/gh_mirrors/cu/cursor-vip "技术不应成为特权,而应是推动文明进步的共同财富。" —— 开…...
终极macOS Windows启动盘制作工具:WinDiskWriter完整指南
终极macOS Windows启动盘制作工具:WinDiskWriter完整指南 【免费下载链接】windiskwriter 🖥 Windows Bootable USB creator for macOS. 🛠 Patches Windows 11 to bypass TPM and Secure Boot requirements. 👾 UEFI & Legac…...
深入浅出讲解Taotoken多模型聚合API在Python项目中的集成方法
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 深入浅出讲解Taotoken多模型聚合API在Python项目中的集成方法 对于正在探索大模型能力的Python开发者而言,直接对接多家…...
Onekey Steam清单下载工具:快速获取游戏清单的完整指南
Onekey Steam清单下载工具:快速获取游戏清单的完整指南 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey Onekey是一款专业的开源Steam Depot清单下载工具,能够直接连接Ste…...
