设计模式之门面模式(Facade)的C++实现

news2024/9/22 7:29:07

1、门面模式提出

在组件的开发过程中,某些接口之间的依赖是比较紧密的,如果某个接口发生变化,其他的接口也会跟着发生变化,这样的代码违背了代码的设计原则。门面设计模式是在外部客户程序和系统程序之间添加了一层中间接口,使依赖的接口之间相互解耦。

2、需求描述

有3个公司,每个公司都有自己的工作流方式;客户端代码使用这3个公司的工作流。

3、门面模式代码实现

#include <iostream>

class CorporationA {
public:
    void WorkFlow() {
        std::cout << "CorporationA WorkFlow" << std::endl;
    };
};

class CorporationB {
public:
    void WorkFlow() {
        std::cout << "CorporationB WorkFlow" << std::endl;
    };
};

class CorporationC {
public:
    void WorkFlow() {
        std::cout << "CorporationC WorkFlow" << std::endl;
    };
};

class Facade {
public:
    void Work() {
        workA.WorkFlow();
        workB.WorkFlow();
        workC.WorkFlow();
    };
private:
    CorporationA workA;
    CorporationB workB;
    CorporationC workC;
};

int main() {
    Facade facade;
    facade.Work();
    return 0;
}

运行结果如下:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

novnc 和 vnc server 如何实现通信?原理?

参考&#xff1a;https://www.codenong.com/js0f3b351a156c/

Vue-7.命令创建Vue项目

使用预设默认配置创建Vue项目 创建一个简单的 Vue 项目需要使用 Vue CLI&#xff08;命令行界面&#xff09;。Vue CLI 是一个用于快速构建 Vue.js 项目的工具&#xff0c;它可以帮助你设置项目的基本结构、配置以及开发环境。 以下是创建一个简单的 Vue 项目的步骤&#xff…

三极管和场效应管-易错点

NPN三极管是电流控制器件。共发射极电路中&#xff1a; 放大区: IceIb x β&#xff0c;Vbe正偏&#xff0c;Vbc反偏&#xff0c; 电势&#xff1a;Vc&#xff1e;Vb&#xff1e;Ve 饱和区&#xff1a; Ice&#xff1c;Ib x β&#xff0c;两个都正偏&#xff0c; 电势&#x…

【 Cocos Creator 项目实战】益智游戏《2048》(附带完整源码工程)

本文乃Siliphen原创&#xff0c;转载请注明出处 目录 游戏介绍 概述 游戏整体流程 游戏框架设计 主要流程控制类 本文项目的代码组织结构 构建游戏世界 数字方块 地图 触摸手势识别 防触摸抖动 判断用户输入的方向 地图 任意大小的地图 初始化地图大小 地图绘制…

Oracle执行计划

Oracle执行计划 1. 什么是执行计划Oracle explain使用3. Explain执行顺序 1. 什么是执行计划 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述。 执行计划描述了SQL引擎为执行SQL语句进行的操作&#xff1b;分析SQL语句相关的性能问题或仅仅质疑查询优化器的决定…

multiple definition of......first defined here

一、背景 环境&#xff1a; 银河麒麟–ARM–GCC7.4.0 写了一个动态库&#xff0c;依赖opencv和freeImage等第三方库&#xff0c;用cmake进行编译。原本在centos6-x86-gcc7.5.0上面进行编译非常的顺利&#xff0c;但是拿到麒麟arm上面编译就提示了这个错误&#xff1a;这个报错…

Matlab工具NIFTI包的基本功能函数

Matlab工具NIFTI包的基本功能函数 Nifti 格式最初是为神经影像学发明的。神经影像信息学技术计划&#xff08;NIFTI&#xff09;将 NIfTI 格式预设为 ANALYZE7.5 格式的替代品。它最初的应用领域是神经影像&#xff0c;但是也被用在其他领域。这种格式的主要特点就是它包含两个…

LVS负载均衡DR模式

在LVS&#xff08;Linux Virtual Server&#xff09;负载均衡中的DR&#xff08;Direct Routing&#xff09;模式下&#xff0c;数据包的流向如下&#xff1a; 客户端发送请求到负载均衡器&#xff08;LVS&#xff09;的虚拟IP&#xff08;VIP&#xff09;。负载均衡器&#x…

String内存结构的分配位置

在Java语言中有8种基本数据类型和一种比较特殊的类型String。这些类型为了使它们在运行过程中速度更快、更节省内存&#xff0c;都提供了一种常量池的概念。常量池就类似一个Java系统级别提供的缓存。8种基本数据类型的常量池都是系统协调额&#xff0c;String类型的常量池比较…

Hive底层数据存储格式

前言 在大数据领域,Hive是一种常用的数据仓库工具,用于管理和处理大规模数据集。Hive底层支持多种数据存储格式,这些格式对于数据存储、查询性能和压缩效率等方面有不同的优缺点。本文将介绍Hive底层的三种主要数据存储格式:文本文件格式、Parquet格式和ORC格式。 一、三…

2023.8.8巨人网络数据开发工程师面试复盘

1 概述 问题一览 总体感觉良好&#xff0c;通过面试官的介绍可知这个岗位偏向离线数仓。 1.自我介绍 2.询问了其中一段实习经历 3.讲下你说用过的Linux命令 4.讲下HIVE的内部表和外部表有什么不同 *5.讲下你使用过的Hive函数&#xff08;好好在复习下多准备几个吧&#xff09…

魔棒:手机智能无人直播软件多少钱?

无人直播因为直播门槛低&#xff0c;不需要真人出镜&#xff0c;不需要请主播&#xff0c;加上可以24小时直播卖券&#xff0c;效果出奇的好&#xff0c;一时很受广大商家的欢迎&#xff0c;那么&#xff0c;这种ai智能无人直播软件究竟多少钱呢&#xff1f; 当然&#xff0c…

nginx反向代理后实现nginx和apache两种web服务器能够记录客户端的真实IP地址

一.构建环境 二.配置反向代理 1.基于源码安装的nginx环境下修改nginx.conf&#xff08;设备1&#xff09; 2.通过windows powershell进行修改hosts文件并测试 3.设备2和设备3上查看日志&#xff0c;可以看到访问来源都是代理服务器&#xff08;2.190&#xff09;而不是真实…

渗透测试-SQL注入原理

文章目录 sql注入原理sql注入基本流程判断是否存在注入&#xff0c;是否会将用户输入拼接到sql语句&#xff0c;并当做代码执行判断字段数判断显错位判断库名判断表名判断列名判断具体数据 sql注入原理 sql注入基本流程 判断是否存在注入&#xff0c;是否会将用户输入拼接到sql…

leetcode 322. 零钱兑换

本题属于完全背包问题&#xff0c;但要求最少的硬币个数。于是设定dp数组的含义dp[i]:总金额为i时&#xff0c;能凑成i的最少硬币个数。 需要注意初始化dp数组时&#xff0c;除0以外的其他地方需要初始化为INT_MAX以保证在递推过程中能被正确的覆盖。 代码如下&#xff1a; …

shell的两种属性: 交互(interactive)与登录(login)

1. 背景 在看shell变量的时候引起了兴趣: 局部变量&#xff0c;全局变量&#xff0c;环境变量&#xff0c;shell的配置文件&#xff0c;参考博客: http://c.biancheng.net/view/773.html 2. 交互式与非交互式 参考博客: shell的两个属性:是否交互式(interactive), 是否登录…

Android---- 一个完整的小项目(消防app)

前言&#xff1a; 针对不同群体的需求&#xff0c;想着应该拓展写方向。医疗app很受大家喜欢&#xff0c;就打算顺手写个消防app&#xff0c;里面基础框架还是挺简洁 规整的。登陆注册和本地数据库写的便于大家理解。是广大学子的毕设首选啊&#xff01; 此app主要为了传递 消防…

vue3中将表格导出excel的方法(极简且有效)

&#x1f970;博主&#xff1a;小猫娃来啦 &#x1f970;文章核心&#xff1a;vue2或vue3中将表格导出excel的通用方法 文章目录 安装依赖&#xff0c;导入模块需要注意的完整导出代码原理效果 安装依赖&#xff0c;导入模块 安装 npm i xlsx 或者 pnpm i xlsx导入 import *…

图片转换pdf怎么转换?这几种方法很好用

图片转换pdf怎么转换&#xff1f;将图片转换为pdf可以使你更方便地分享和存储文件。相比于图片格式&#xff0c;pdf格式更加通用&#xff0c;可以在不同的设备和操作系统上打开和查看。此外&#xff0c;pdf格式还可以更好地保护你的文件&#xff0c;可以设置密码保护和防止复制…

vue3 基础知识(webpack) 02

你好&#xff0c;今天过的怎么样呀&#xff0c;嘿嘿&#xff0c;加油夏 &#x1f495; 文章目录 一、组件二、如何支持SFC三、webpack 打包工具 一、组件 使用组件中我们可以获得非常多的特性&#xff1a; 代码的高亮&#xff1b;ES6、CommonJS的模块化能力&#xff1b;组件作…