C++设计模式之——外观模式

外观模式

  • 概念
  • 使用场景
  • 示例
    • 示例代码
    • 运行结果
  • 总结

概念

外观模式是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式隐藏了子系统的复杂性,使客户端可以更容易地使用子系统。

使用场景

外观模式的使用场景可包含以下的几点,但是不限于下面这些情况。

1.简化复杂系统:当一个系统非常复杂,由许多子系统组成时,可以使用外观模式来提供一个简单的接口,隐藏系统的复杂性,使客户端更容易使用系统。

2.封装遗留代码:在现有的系统中,可能存在一些老旧的代码或者接口,可以使用外观模式来封装这些遗留代码,使其对客户端透明,同时可以逐步进行系统重构。

3.提供统一接口:当一个系统提供了多个接口,而客户端只需要使用其中的一部分时,可以使用外观模式来提供一个统一的接口,简化客户端的使用。

4.降低耦合度:外观模式可以降低系统中各个模块之间的耦合度,使得系统更易于维护和扩展。

总的来说,外观模式适用于需要简化复杂系统、封装遗留代码、提供统一接口以及降低系统模块之间耦合度的场景。

示例

在C++中实现外观模式,通常需要定义一个外观类,该类提供对子系统中的一组类的访问。外观类可以隐藏子系统的内部细节,并简化客户端与子系统之间的交互。
下面通过编程的示例来加深理解外观模式。

示例代码

#include <iostream>  // 子系统中的类  
class SubsystemA {  
public:  void operationA() {  std::cout << "SubsystemA operation" << std::endl;  }  
};  class SubsystemB {  
public:  void operationB() {  std::cout << "SubsystemB operation" << std::endl;  }  
};  // 外观类  
class Facade {  
public:  Facade() {  subsystemA = new SubsystemA();  subsystemB = new SubsystemB();  }  ~Facade() {  delete subsystemA;  delete subsystemB;  }  void performOperations() {  subsystemA->operationA();  subsystemB->operationB();  }  private:  SubsystemA* subsystemA;  SubsystemB* subsystemB;  
};  // 客户端代码  
int main() {  Facade facade;  facade.performOperations(); // 调用子系统的操作  return 0;  
}

运行结果

在这里插入图片描述

总结

外观模式本质是提供一个外观类,将一些子类进行了封装,提供了统一对外可供访问的接口。降低了各个子类之间的耦合性,隐匿了子类的具体实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/284370.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10-Flow

1 Knative Event Flow Importer 连接至期望使用的第3方消息系统基于HTTP协议POST CloudEvents到Channel、Broker、Sequence/Parallel或Service/KService Channel 支持多路订阅为订阅者“持久化”消息数据 Service 接收CloudEvents&#xff08;可选&#xff09;回复处理后的…

【Hive】——DML

1 Load&#xff08;加载数据&#xff09; 1.1 概述 1.2 语法 LOAD DATA [LOCAL] INPATH filepath [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1val1, partcol2val2 ...)]LOAD DATA [LOCAL] INPATH filepath [OVERWRITE] INTO TABLE tablename [PARTITION (partcol…

Python 高德地图POI信息爬取代码详解

1. 函数要点整理 get_amap_poi(city, keywords, page) 这个函数旨在从高德地图中提取指定城市的POI&#xff08;Point of Interest&#xff09;信息。以下是函数的参数和返回值说明&#xff1a; 参数&#xff1a; city: 城市名称&#xff0c;指定要搜索的城市。keywords: 关键…

如何正确选择高速探头

最近看到一篇关于高速探头在DDR5测试中的应用文章&#xff0c;才发现探头的架构原来大有讲究&#xff0c;远远不是简单地带宽越高效果越好&#xff0c;而是需要根据测试对象进行合理地选择。 与示波器一起使用的高频电压探头会对其所连接的电路产生各种类型的负载效应&#xff…

Linux5.3、进程替换

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 替换原理 替换函数 函数解释 替换原理 当一个进程调用进程替换函数时&#xff0c;该进程的数据和代码完全被新程序的代码和数据所代替&#xff0c;而后重新构建页表的映射关系&#xff0c;进程还是之前的进程&#…

什么是SPEC基准测试?

SPEC服务器应用性能测试是一个全面衡量Web应用中java企业应用服务器性能的基础测试。 SPEC(the Standard Performance Evaluation Corporation标准性能评估机构)是一个全球性的、权威的第三方应用性能测试组织&#xff0c;它旨在确立、修改以及认定一系列服务器应用性能评估的…

SpringBoot配置mysql加密之Druid方式

一、导入Druid依赖 <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.22</version> </dependency>二、生成密文 方式1. 找到存放druid jar包的目录 1-1、在目录…

【企业转型】以企业架构为中心的SABOE数字化转型五环法

01 传统企业数字化转型面临诸多挑战 即将过去的2023年&#xff0c;chatGPT大模型、数据资产入表等事件的发生&#xff0c;标志着数字经济正在加速发展。数字经济是人类社会继农业经济、工业经济之后的第三种经济形态&#xff0c;将推动生产方式、生活方式和治理方式深刻变革&a…

Java研学-JavaScript 进阶

一 JS 的 DOM 1 概述 DOM 是 Document Object Model 文档对象模型的缩写。根据 W3C 的 DOM 规范&#xff0c;它是一种与浏览器&#xff0c;平台&#xff0c;语言无关的接口&#xff0c;能够动态地修改 XML 和 HTML。   D&#xff1a;文档 – HTML文档 或 XML 文档   O&…

CSS学习笔记整理

CSS 即 层叠样式表/CSS样式表/级联样式表&#xff0c;也是标记语言&#xff0c; 用于设置HTML页面中的文本内容&#xff08;字体、大小、对齐方式等&#xff09;、图片的外形&#xff08;宽高、边框样式、边距&#xff09;以及版面的布局和外观显示样式 目录 准备工作 Chrome调…

基于FPGA的温度控制系统设计(论文+源码)

1.系统设计 本次基于FPGA的智能温度控制系统&#xff0c;以FPGA为控制核心&#xff0c;采用自顶向下的设计方法&#xff0c;按照模块化设计的思路分别实现各个模块&#xff0c;再加以整合实现整个系统&#xff0c;从而达到了温度控制的目的。系统以水箱为被控对象&#xff0c;…

环境搭建及源码运行_java环境搭建_redis安装

书到用时方恨少、觉知此时要躬行&#xff1b;拥有技术&#xff0c;成就未来&#xff0c;抖音视频教学地址&#xff1a;​​​​​​​ ​​​​​​​​​​​​​​ 1、redis 介绍 后面会有精讲redis部分&#xff0c;此部分内容着重在redis环境的搭建 Redis&#xff08;Remot…