当前位置: 首页 > news >正文

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-设计模式之外观模式 本节关键字&#xff1a;Linux、C、设计模式、外观模式 相关库函数&#xff1a; 概念 外观模式&#xff08;Facade&#xff09;&#xff0c;亦称“过程模式”。主张按照描述和判断资料来评价课程&#xff0c;关键的活动是在课程实施的全过程中…...

Linux - 冯-诺依曼体系结构、初始操作系统

目录 冯•诺依曼体系 结构推导 内存提高效率的方法 数据的流动过程 体系结构相关知识 初始操作系统 定位 设计目的 操作系统之上之下分别有什么 管理精髓&#xff1a;先描述&#xff0c;再组织 冯•诺依曼体系 结构推导 计算机基本工作流程图大致如下&#xff1a; 输入设备&a…...

成功适配!极验设备指纹HarmonyOS 鸿蒙版官方下载

近日&#xff0c;华为开发者大会&#xff08;HDC 2024&#xff09;在东莞召开。在大会开幕日的首场主题演讲中&#xff0c;华为宣布当前已有TOP5000应用成为鸿蒙原生应用&#xff0c;350&#xff0b;SDK已适配HarmonyOS NEXT版本。其中&#xff0c;极验作为其重要伙伴&#xff…...

【C++】字符串学习 知识点+代码记录

一.知识点总结 1. C风格字符串&#xff08;字符数组&#xff09; 字符数组存储字符串&#xff1a;C风格的字符串实际上是字符数组&#xff0c;以空字符\0作为结尾标志。字符串字面量与字符数组&#xff1a;字符串字面量如"Hello"被编译器视为const char*类型&#…...

尝试理解docker网络通信逻辑

一、docker是什么 Docker本质是一个进程,宿主机通过namespace隔离机制提供进程需要运行基础环境&#xff0c;并且通过Cgroup限制进程调用资源。Docker的隔离机制包括 network隔离&#xff0c;此次主要探讨网络隔离mount隔离hostname隔离user隔离pid隔离进程通信隔离 二、doc…...

数据仓库哈哈

数据仓库 基本概念数据库&#xff08;database&#xff09;和数据仓库&#xff08;Data Warehouse&#xff09;的异同 整体架构分层架构方法论ER模型&#xff08;建模理论&#xff09;维度模型 何为分层第一层&#xff1a;数据源&#xff08;ODS ER模型&#xff09;设计要点日志…...

K最近邻(K-Nearest Neighbors, KNN)

K最近邻&#xff08;K-Nearest Neighbors, KNN&#xff09;理论知识推导 KNN算法是一个简单且直观的分类和回归方法&#xff0c;其基本思想是&#xff1a;给定一个样本点&#xff0c;找到训练集中与其最近的K个样本点&#xff0c;根据这些样本点的类别&#xff08;分类问题&am…...

深度学习损失计算

文章目录 深度学习损失计算1.如何计算当前epoch的损失&#xff1f;2.为什么要计算样本平均损失&#xff0c;而不是计算批次平均损失&#xff1f; 深度学习损失计算 1.如何计算当前epoch的损失&#xff1f; 深度学习中的损失计算&#xff0c;通常为数据集的平均损失&#xff0…...

论文翻译:通过云计算对联网多智能体系统进行预测控制

通过云计算对联网多智能体系统进行预测控制 文章目录 通过云计算对联网多智能体系统进行预测控制摘要前言通过云计算实现联网的多智能体控制系统网络化多智能体系统的云预测控制器设计云预测控制系统的稳定性和一致性分析例子结论 摘要 本文研究了基于云计算的网络化多智能体预…...

Java核心(五)多线程

线程并行的逻辑 一个线程问题 起手先来看一个线程问题&#xff1a; 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工具&#xff0c;但我觉得WebStorm 应该也可以 文章目录 进入项目根目录下&#xff0c;进入cmd输入如下指令&#xff1a; 只有文件夹 tree . > list.txt 包括文件夹和文件 tree /f . > list.txt 还可以为相关包路径加上注释...

【CPO-TCN-BiGRU-Attention回归预测】基于冠豪猪算法CPO优化时间卷积双向门控循环单元融合注意力机制

基于冠豪猪算法CPO&#xff08;Correlation-Preservation Optimization&#xff09;优化的时间卷积双向门控循环单元&#xff08;Bidirectional Gated Recurrent Unit&#xff0c;BiGRU&#xff09;融合注意力机制&#xff08;Attention&#xff09;的回归预测需要详细的实现和…...

面试高级 Java 工程师:2024 年的见闻与思考

面试高级 Java 工程师&#xff1a;2024 年的见闻与思考 由于公司业务拓展需要&#xff0c;公司招聘一名高级java工程研发工程师&#xff0c;主要负责新项目的研发及老项目的维护升级。我作为一名技术面试官&#xff0c;参与招聘高级 Java 工程师&#xff0c;我见证了技术领域的…...

设计模式大白话之装饰者模式

想象一下&#xff0c;你走进一家咖啡馆&#xff0c;点了一杯美式咖啡。但是&#xff0c;你可能还想根据自己的口味添加一些东西&#xff0c;比如奶泡、巧克力粉、焦糖酱或是肉桂粉。每次你添加一种配料&#xff0c;你的咖啡就会变得更丰富&#xff0c;同时价格也会相应增加。 在…...

动手学深度学习6.3 填充和步幅-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;填充和步幅_哔哩哔哩_bilibili 代码实现_哔哩哔哩_bilibili 本节教材地址&#xff1a;6.3. 填充和…...

函数的形状怎么定义?

在TypeScript中&#xff0c;函数的形状可以通过多种方式定义&#xff0c;以下是几种主要的方法&#xff1a; 1、函数声明&#xff1a;使用function关键字声明函数&#xff0c;并直接在函数名后的括号内定义参数&#xff0c;通过冒号&#xff08;:&#xff09;指定参数的类型&a…...

Windows 虚拟机服务器项目部署

目录 一、部署JDK下载JDK安装JDK1.双击 jdk.exe 安装程序2.点击【下一步】3.默认安装位置&#xff0c;点击【下一步】4.等待提取安装程序5.默认安装位置&#xff0c;点击【下一步】6.等待安装7.安装成功&#xff0c;点击【关闭】 二、部署TomcatTomcat主要特点包括&#xff1a;…...

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)

一份标准优秀的产品需求文档包括&#xff1a; ❑ 封面&#xff1b; ❑ 文档修订记录表&#xff1b; ❑ 目录&#xff1b; ❑ 引言&#xff1b; ❑ 产品概述&#xff1a;产品结构图 ❑ 详细需求说明&#xff1a;产品逻辑图、功能与特性简述列表、交互/视觉设计、需求详细描述&am…...

AI赋能国际化:让快马平台中的模型为你的trea国际版提供智能文案与适配建议

AI赋能国际化&#xff1a;让快马平台中的模型为你的trea国际版提供智能文案与适配建议 开发国际化应用时&#xff0c;最头疼的往往不是技术实现&#xff0c;而是如何让产品真正融入不同地区的文化和语言习惯。最近在开发trea国际版时&#xff0c;我发现InsCode(快马)平台的AI辅…...

2026年AI Agent元年:从对话式交互到自主任务执行的跨越

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…...

关于统好 AI可持续发展三大趋势

问&#xff1a;如何理解统好 AI 的可持续发展趋势&#xff1f;答&#xff1a;统好 AI 的可持续发展&#xff0c;核心是技术、业务与运营长期适配&#xff0c;不追求短期迭代&#xff0c;而是围绕企业全生命周期需求构建稳定演进路径。绵阳统好软件有限公司以一体化底座为基础&a…...

华为OD机考双机位C卷 - 数字游戏 (Java)

# 数字游戏 2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 华为OD机试双机位C卷真题目录(Java)点击查看: 【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(Java题解) 题目描述 小明玩一个游戏。 系统发1+n张牌,每张牌上有一个整数。 第一张给…...

基于非线性油膜力的转子不平衡质量反向识别:神经网络建模与参数优化

基于非线性油膜力的转子不平衡质量反向识别:神经网络建模与参数优化 摘要 转子系统的不平衡质量是导致振动故障的主要因素之一。传统上,不平衡质量与振动响应之间存在近似线性关系,但在某些工况下(如油膜轴承非线性区),两者呈强非线性关系,给反向识别带来困难。本文首…...

探索固定翼无人机编队控制:从高效协同到PX4-Autopilot落地实践

探索固定翼无人机编队控制&#xff1a;从高效协同到PX4-Autopilot落地实践 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot PX4-Autopilot作为开源无人机飞控系统的核心框架&#xff0c;通过模块化设…...

CANTools:基于Python的多硬件CAN总线诊断与测试工具开发实践

1. 为什么你需要CANTools这个神器 第一次接触CAN总线开发时&#xff0c;我被动辄十几万的商用测试工具吓到了。作为汽车电子工程师&#xff0c;我们经常需要和ECU打交道&#xff0c;但传统工具的高昂成本让很多小团队望而却步。直到发现可以用Python开发自己的CAN工具&#xff…...

PCB开窗技术:提升电流承载能力的关键工艺

1. PCB开窗技术解析&#xff1a;从概念到应用在PCB设计领域&#xff0c;"开窗"这个术语经常被经验丰富的工程师挂在嘴边&#xff0c;但对于刚入行的新手来说&#xff0c;这个看似简单的操作背后却蕴含着不少设计门道。作为一名有十年硬件设计经验的工程师&#xff0c…...

GraphRAG实战:我是如何用它分析公司内部文档,让客服响应时间缩短近30%的

GraphRAG实战&#xff1a;我是如何用它分析公司内部文档&#xff0c;让客服响应时间缩短近30%的 作为一家中型电商企业的技术负责人&#xff0c;我最近半年一直在与客服团队的一个顽固问题搏斗&#xff1a;每当新品上线或促销活动期间&#xff0c;客服人员需要花费大量时间在不…...

KS-Downloader:快手无水印内容获取与管理的专业解决方案

KS-Downloader&#xff1a;快手无水印内容获取与管理的专业解决方案 【免费下载链接】KS-Downloader 快手&#xff08;KuaiShou&#xff09;视频/图片下载工具&#xff1b;数据采集工具 项目地址: https://gitcode.com/gh_mirrors/ks/KS-Downloader 在短视频内容创作与传…...