C++外观模式

2023-10-26

外观模式

1、外观模式简介及应用场景

  外观者模式其实就是相当于对一组子系统功能的组合,对外提供统一的简单接口的模式。当我们在实际开发中,一般情况下是一个单独的子系统对应的是一个独立的功能模块,但是随着业务功能的不断增加,对应子系统的迭代必然是越来越复杂的。此时便可引入外观模式:将必要的一些子系统的功能进行归类封装成一个简单的接口即可。

2、区别与代理模式及适配器模式

  代理模式的本质是相当于增加了一个访问的中间层,为业务逻辑判断等做一些必要的处理。适配器模式主要是为了解决两个类中需要互相耦合但是接口互不兼容的问题,适配器模式对其中一个类加一层封装之后提供可调用的接口给另一个类。从而达到接口兼容的目的。而此处的外观模式则是对一组子系统功能的归类,并对外提供接口。

3、实例讲解外观模式

  现有如下场景:当我们去大保健的时候,想让熟悉的小红来做足疗、小丽来做个spa、最后在和小芳进行一次深入交流。而如果我们和她们逐个沟通会很浪费时间(体现在设计上的即是耦合度很高)。那么这时我们一般会和经理沟通,由经理来进行安排(此处的经理便是外观模式精髓)。
  如此便很好的降低了程序的耦合度增加了程序的访问层次结构,使子系统的复杂处理流程由自己维护,无需对外暴露,而只把客户端需要的功能集成到外观类中,并提供接口即可。

3.1子系统类

class XiaoHong
{
public:
    XiaoHong();
    ~XiaoHong();
    void DoPedicure()
	{
		cout<<"洗脚"<<endl; 
	}
};
 
class XiaoLi
{
public:
    XiaoLi();
    ~XiaoLi();
    void DoSpa()
	{
		cout<<"做spa"<<endl; 
	}
};
 
class XiaoFang
{
public:
    XiaoFang();
    ~XiaoFang();
    void DoSomething()
	{
		cout<<"深入交流"<<endl; 
	}
};

3.2外观类

class Facade
{
public:
    Facade();
    ~Facade();
    void OneDragon()
	{
		m_strHong = new XiaoHong;
		m_strLi = new XiaoLi;
		m_strFang  = new  XiaoFang;
		
		m_strHong->DoPedicure();
		m_strLi->DoSpa();
		m_strFang->DoSomething();
		cout<<"一条龙服务"<<endl; 
	}
private:
    XiaoHong* m_strHong;
    XiaoLi* m_strLi;
	XiaoFang * m_strFang
};

3.3调用

int main()
{
	Facade *pFacade = new Facade;
	pFacade->OneDragon();
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++外观模式 的相关文章

  • 即使定义了其他主键,实体框架 6 也会创建 Id 列

    我将 DataObject 定义为 public class SensorType EntityData PKs public string CompanyId get set public string ServiceId get set
  • 除了第一列之外,Gridview 行可点击?

    我使用以下代码使 gridview 的整行可单击 protected void gridMSDS RowDataBound object sender GridViewRowEventArgs e if e Row RowType Data
  • 在静态断言和运行时错误之间自动选择

    我有一个执行除法并检查对齐的宏 define BYTES TO WORDS x CHECK ALIGNMENT x 2 x 2 我想实施CHECK ALIGNMENT作为一个总是返回 1 的宏 并且如果满足以下条件则触发错误x不除以 2 宏
  • 根据另一个列表的内容对列表进行排序

    我有一个包含整数列表的列表和另一个包含同时包含整数和字符串的类的列表 我想做的是按字母顺序对列表进行排序 将第一个列表中存在的条目放在前面 这是我的代码和预期输出 using System using System Collections
  • C++ 中的字符串到 LPCWSTR

    我正在尝试从字符串转换为 LPCWSTR 我使用多位 1 例如 LPCWSTR ToLPCWSTR string text LPCWSTR sw LPCWSTR text c str return sw 2 返回中文字符 LPCWSTR T
  • 获取光标相对于控件的位置 - C#

    我想获取鼠标相对于鼠标指针所在控件的位置 这意味着当我将光标置于控件的起点 左上角 时 它应该给出 0 0 我正在使用以下代码 private void panel1 MouseMove object sender MouseEventAr
  • 将 Visual Studio 2012 C++ 单元测试项目链接到 exe 会导致访问冲突

    我从现有的整体 exe 本机 Visual Studio 2012 项目开始 我想添加一个本机单元测试项目 根据http msdn microsoft com en us library hh419385 aspx objectRef ht
  • 堆栈独立的C/C++蓝牙API?

    我想知道是否有适用于 Windows XP Vista 7 x86 和 x64 的堆栈独立 C C 蓝牙 api 我的目标是创建连接并通过蓝牙发送 接收一些时间关键的数据 我的研究给了我以下选择以及这项任务的缺点 用于蓝牙的 Windows
  • 将 Uploadify 与 Sharepoint 和 .net 结合使用

    我在共享点页面上有一些由 JQuery 生成的 html 我想在这个 html 中使用 uploadify 将文件上传到服务器 亚历山大 https stackoverflow com users 25427 alexander gyosh
  • EASTL 与 STL 相比,std::vector::operator[] 怎么会有这么大的性能差异

    根据http www open std org jtc1 sc22 wg21 docs papers 2007 n2271 html http www open std org jtc1 sc22 wg21 docs papers 2007
  • 混合 VS2012 平台工具集

    我们正在从 VS2005 切换到 VS2012 update 2 我们正在构建大量 主要是控制台 本机 C 无 MFC ATL 可执行文件 它们使用几个常见的静态链接库 这些可执行文件主要在 Win7 计算机上运行 但有些也部署在较旧的 X
  • 输入缓冲区刷新

    考虑下面的代码 include
  • 当应用程序未聚焦时监听按键

    我有一个应用程序 C 4 0 WPF 它是隐藏的 可以通过单击系统托盘图标或我创建的其他框架 停靠在左侧和最上面的小框架 来显示 My customer wants to add a new way to display the appli
  • 从 Linq 的列表中选择多个字段

    在 ASP NET C 中 我有一个结构 public struct Data public int item1 public int item2 public int category id public string category
  • 如何定义 Swagger UI 参数的默认值?

    我已将 Swagger Swashbuckle 集成到 NET Core 2 2 API 项目中 一切都很好 我的要求纯粹是为了方便 考虑以下 API 方法 public Model SomeEstimate SomeRequest req
  • 为 C++ 类播种 rand()

    我正在开发一个 C 类 它使用rand 在构造函数中 我真的希望这个班级在几乎所有方面都能照顾好自己 但我不知道在哪里播种rand 如果我播种rand 在构造函数中 每次构造我的对象类型的新实例时都会对其进行播种 因此 如果我按顺序创建 3
  • C中的pipe()和fork()

    我需要创建两个子进程 一个子进程需要运行命令 ls al 并将其输出重定向到下一个子进程的输入 而下一个子进程又将对其输入数据运行命令 sort r n k 5 最后 父进程需要读取该数据 已排序的数据 并将其显示在终端中 终端中的最终结果
  • 可选参数代码在 .NET 3.5 中编译。为什么?

    这段代码在 VS 2010 的框架 3 5 项目中编译正常 我三次检查过 public LoggingClient string uri net msmq localhost logging 为什么 我在 C 4 规范中没有看到任何内容 文
  • MsBuild 在 Visual Studio Online 上找不到恢复的 NuGet 包

    我尝试构建一个存储在 Visual Studio Online 上的外部 GIT 存储库中的解决方案 它有以下步骤 1 Git 恢复 有效 2 NuGet 恢复 有效 3 构建 不起作用 查看日志时我的第一个猜测是 MsBuild 没有查找
  • AddressAccessDeniedException :无需 netsh 即可解决它?

    我遇到了异常AddressAccessDeniedException因为我的processus没有注册URL的权限 我首先以管理员身份运行我的程序 好的 它成功了 但我现在想要分发我的应用程序 并且我希望每个用户都能够运行它 而不必成为管理

随机推荐

  • 70个Python练手项目列表(都有完整教程)

    前言 不管学习那门语言都希望能做出实际的东西来 这个实际的东西当然就是项目啦 不用多说大家都知道学编程语言一定要做项目才行 这里整理了70个Python实战项目列表 都有完整且详细的教程 你可以从中选择自己想做的项目进行参考学习练手 你也可
  • 李宏毅深度学习之集成学习

    1 bagging 没有顺序的 bagging是将单个函数的结果进行average 回归 或voting 分类 当在model很复杂的情况下 担心过拟合问题 可以做bagging 1 1容易过拟合的模型 1 1 1decision tree
  • flutter 页面缓存

    flutter页面缓存方法 混入AutomaticKeepAliveClientMixin部件设置页面缓存 在动态部件内 class Page1 extends StatefulWidget override Page1State crea
  • js逆向 webpack_js逆向之webpack模块

    目标网址 b aHR0cHM6Ly93d3cuZ205OS5jb20v 开始控制台 跟xhr调用栈 打上断点 再次请求 发现加密函数 跟进去 Webpack 这就是webpack的基本模型 两种形态一个参数是list 一个是object 再
  • C#程序删除自己

    private static void DeleteItselfByCMD ProcessStartInfo psi new ProcessStartInfo cmd exe C ping 1 1 1 1 n 1 w 1000 gt Nul
  • Nand Flash,Nor Flash,CFI Flash,SPI Flash 之间的关系

    前言 在嵌入式开发中 如uboot的移植 kernel的移植都需要对Flash 有基本的了解 下面细说一下标题中的中Flash中的关系 一 Flash的内存存储结构 flash按照内部存储结构不同 分为两种 nor flash和nand f
  • SpringBootWeb登录认证

    登录服务端的核心逻辑就是 接收前端请求传递的 用户名 和 密码 然后再根据用户名和密码查询用户信息 如果用户信息存在 则说明用户输入的用户名和密码正确 如果查询到的用户不存在 则说明用户输入的用户名和密码错误 统一拦截 可以使用两种技术实现
  • 2016年10月—信息安全工程师—上午综合知识(26-30)

    信安16年10月 试题26 26 已知DES算法的S盒如下 如果该S盒的输入110011 则其二进制输出为 A 0110 B 1001 C 0100 D 0101 尚大参考答案 C 解析 本题考查考生对DES算法中S 盒的运用 DES算法是
  • 2.COM接口

    2 1 再谈接口与实现 其实从上一章 COM是个更好的C 可以看出 COM最重要的就是将接口与实现分离 上一章中接口定义头文件中采用C 抽象类的形式 如果调用方是C 环境当然不会有问题 但如果调用方不是C 的编译环境呢 为了把 接口定义 与
  • Mean Average Precision(mAP),Precision,Recall,Accuracy,F1_score,PR曲线、ROC曲线,AUC值,决定系数R^2 的含义与计算...

    背景 之前在研究Object Detection的时候 只是知道Precision这个指标 但是mAP mean Average Precision 具体是如何计算的 暂时还不知道 最近做OD的任务迫在眉睫 所以仔细的研究了一下mAP的计算
  • 期货开户供求平衡周而复始

    1 供求关系和价值规律的演变方程式 人们常说 价格围绕价值波动 傅海棠认为更准确的说法应是 价格围绕成本波动 大部分时间 价格在成本之上 小部分时间 价格在成本之下 价格低了 生产积极性受到抑制 供应减少 而低价还刺激需求 一个行业如果商品
  • 如何将你接入微信自动回答别人的问题

    要将我接入微信自动回答别人的问题 您需要使用微信的开放平台 API 使用开放平台 API 您可以创建一个小程序 该小程序可以接收用户发送的消息 并使用我这个语言模型来生成回复消息 具体来说 您需要以下步骤 在微信公众平台上注册一个小程序 并
  • Python每日一记42>>>机器学习中特征重要性feature_importances_

    在进行机器学习算法中 我们常用的算法就像下面的代码形式类型 经历导入数据 预处理 建模 得分 预测 但是总觉得少了点什么 虽然我们建模的目的是进行预测 但是我们想要知道的另一个信息是变量的重要性 在线性模型中 我们有截距和斜率参数 但是其他
  • LDO和DCDC电路的概述和区别

    一 什么是DCDC DCDC的意思是直流变 到 直流 不同直流电源值的转换 只要符合这个定义都可以叫DCDC转换器 常见的DCDC电路有buck boost buck boost分别是降压 升压 降压升压电路 二 什么是LDO LDO 是一
  • Linux驱动——设备树

    在对总线设备驱动进行详细说明时可以看出 虽然总线设备驱动可以实现驱动和设备分离 但是总线设备驱动引发另外的一个问题就是在相同的芯片不同的开发板上 当外设资源不同时需要在不同的设备文件中去定义引脚 这样就导致开发板中保留大量设备文件 为了解决
  • 多元任务,高额奖金!首届“开放原子开源大赛”等你参与!

    人类有各种交流方式 包括语言 文字 音乐 影像等 有的贴近生活 有的充满艺术感 然而 在人工智能时代 代码作为一种特殊的交流形式愈发重要 它使得人与人 人与机器之间能够高效便捷地沟通 从而为科技发展注入活力 开源 则是让这种交流变得更加丰富
  • Android ADB命令大全(通过ADB命令查看wifi密码、MAC地址、设备信息、操作文件、查看文件、日志信息、卸载、启动和安装APK等)

    ADB很强大 记住一些ADB命令有助于提高工作效率 获取序列号 adb get serialno 查看连接计算机的设备 adb devices 重启机器 adb reboot 重启到bootloader 即刷机模式 adb reboot b
  • URL、URI和URN之间的区别

  • 程序员应该掌握的 10 个搜索技巧

    在今天 用户可以通过搜索引擎轻松找出自己想要的信息 但还是难以避免结果不尽如人意的情况 实际上 用户仅需掌握几个常用技巧即可轻松化解这种尴尬 下面介绍 10 个在进行 Google 搜索时可以使用的便捷技巧 其他搜索引擎也支持这 10 种技
  • C++外观模式

    外观模式 1 外观模式简介及应用场景 外观者模式其实就是相当于对一组子系统功能的组合 对外提供统一的简单接口的模式 当我们在实际开发中 一般情况下是一个单独的子系统对应的是一个独立的功能模块 但是随着业务功能的不断增加 对应子系统的迭代必然