《C++新经典设计模式》之第8章 外观模式

《C++新经典设计模式》之第8章 外观模式

        • 外观模式.cpp

外观模式.cpp
#include <iostream>
#include <memory>
using namespace std;// 中间层角色,隔离接口,两部分模块通过中间层打交道
// 提供简单接口,不与底层直接打交道
// 提供统一接口,访问子系统中的一群接口
// 定义高层接口,让子系统更容易使用// 迪米特法则
// 一个对象对其他对象的了解应尽可能少,降低对象间耦合,提高系统的可维护性namespace ns1
{class graphic // 图形相关类{graphic(){};graphic(const graphic &tmpobj);graphic &operator=(const graphic &tmpobj);~graphic(){};public:static graphic &getInstance(){static graphic instance;return instance;}public:void display(bool enable) // 是否全屏显示(true:是){cout << "full screen->" << enable << endl;}void effect(bool enable) // 是否开启特效(true:是){cout << "special effects->" << enable << endl;}void resolution(int index) // 设置窗口分辨率{cout << "resolution ratio->" << index << endl;}void antialiasing(bool enable) // 是否开启抗锯齿(true:是){cout << "anti-aliasing->" << enable << endl;}};class sound // 声音相关类{sound(){};sound(const sound &tmpobj);sound &operator=(const sound &tmpobj);~sound(){};public:static sound &getInstance(){static sound instance;return instance;}public:void bgsound(bool enable) // 是否开启背景声音(true:是){cout << "background sound->" << enable << endl;}void envirsound(bool enable) // 是否开启环境音效(true:是){cout << "environmental sound effect->" << enable << endl;}void expsound(bool enable) // 是否开启表情声音(true:是){cout << "expressional voice->" << enable << endl;}void setvolume(int level) // 音量大小设置(0-100){cout << "volume->" << level << endl;}};class chatvoice // 语音聊天相关类{chatvoice(){};chatvoice(const chatvoice &tmpobj);chatvoice &operator=(const chatvoice &tmpobj);~chatvoice(){};public:static chatvoice &getInstance(){static chatvoice instance;return instance;}public:void micvolume(int level) // 麦克风音量大小设置(0-100){cout << "microphone volume->" << level << endl;}void micsens(int level) // 麦克灵敏度设置(0-100){cout << "microphone sensitivity->" << level << endl;}void chatvolume(int level) // 聊天音量设置(0-100){cout << "chat volume->" << level << endl;}};class conffacade // 扮演外观模式角色的类{conffacade(){};conffacade(const conffacade &tmpobj);conffacade &operator=(const conffacade &tmpobj);~conffacade(){};public:static conffacade &getInstance(){static conffacade instance;return instance;}public:void LowConfComputer() // 对于低配置电脑,只开启一些低配置选项{graphic &g_gp = graphic::getInstance();g_gp.display(true); // 全屏耗费资源更低g_gp.effect(false);g_gp.resolution(2);g_gp.antialiasing(false);sound &g_snd = sound::getInstance();g_snd.bgsound(false);g_snd.envirsound(false);g_snd.expsound(false);g_snd.setvolume(15);chatvoice &g_cv = chatvoice::getInstance();g_cv.micvolume(20);g_cv.micsens(50);g_cv.chatvolume(60);}void HighConfComputer() // 对于高配置电脑,能达到最好效果的项全部开启{graphic &g_gp = graphic::getInstance();g_gp.display(false);g_gp.effect(true);g_gp.resolution(0);g_gp.antialiasing(true);sound &g_snd = sound::getInstance();g_snd.bgsound(true);g_snd.envirsound(true);g_snd.expsound(true);g_snd.setvolume(50);chatvoice &g_cv = chatvoice::getInstance();g_cv.micvolume(100);g_cv.micsens(100);g_cv.chatvolume(100);}};
}namespace ns2
{class Screen // 屏幕{public:void On() { cout << "screen on!" << endl; }void Off() { cout << "screen off!" << endl; }};class Light // 灯光{public:void On() { cout << "light open!" << endl; }void Off() { cout << "light close!" << endl; }};class Speaker // 音箱{public:void On() { cout << "speaker on!" << endl; }void Off() { cout << "speaker off!" << endl; }};class DvdPlayer // DVD播放器{public:void On() { cout << "dvd open!" << endl; }void Off() { cout << "dvd close!" << endl; }};class PlayerStation // 游戏机{public:void On() { cout << "playerstation on!" << endl; }void Off() { cout << "playerstation off!" << endl; }};class HomeTheaterFacade // 家庭影院外观模式类{Screen scnobj;Light lgobj;Speaker spkobj;DvdPlayer dpobj;PlayerStation psobj;public:void WatchMovie() // 看电影{// 屏幕打开,灯光熄灭,音箱打开,DVD播放器打开,游戏机关闭。scnobj.On();lgobj.Off();spkobj.On();dpobj.On();psobj.Off();}void PlayGame() // 玩游戏{// 屏幕打开,灯光打开,音箱打开,DVD播放器关闭,游戏机打开。scnobj.On();lgobj.On();spkobj.On();dpobj.Off();psobj.On();}};
}namespace ns3
{class Shape{public:virtual ~Shape() = default;virtual void draw() const = 0;};class Rectangle : public Shape{public:void draw() const override { cout << "Rectangle::draw()" << endl; }};class Square : public Shape{public:void draw() const override { cout << "Square::draw()" << endl; }};class Circle : public Shape{public:void draw() const override { cout << "Circle::draw()" << endl; }};class ShapeMaker{shared_ptr<Shape> circle;shared_ptr<Shape> rectangle;shared_ptr<Shape> square;public:ShapeMaker(){circle = make_shared<Circle>();rectangle = make_shared<Rectangle>();square = make_shared<Square>();}void drawCircle() const { circle->draw(); }void drawRectangle() const { rectangle->draw(); }void drawSquare() const { square->draw(); }};
}int main()
{
#if 0using namespace ns1;graphic &g_gp = graphic::getInstance();g_gp.display(false);g_gp.effect(true);g_gp.resolution(2);g_gp.antialiasing(false);cout << "---------------" << endl;sound &g_snd = sound::getInstance();g_snd.setvolume(80);g_snd.envirsound(true);g_snd.bgsound(false);cout << "---------------" << endl;chatvoice &g_cv = chatvoice::getInstance();g_cv.chatvolume(70);g_cv.micsens(65);
#endif#if 0using namespace ns1;conffacade &g_cffde = conffacade::getInstance();cout << "Low-configuration computer" << endl;g_cffde.LowConfComputer();cout << "------------------" << endl;cout << "high-configuration computer" << endl;g_cffde.HighConfComputer();
#endif#if 0ns2::HomeTheaterFacade htfacobj;cout << "movie---------------" << endl;htfacobj.WatchMovie();cout << "game---------------" << endl;htfacobj.PlayGame();
#endif#if 1using namespace ns3;shared_ptr<ShapeMaker> shapeMaker(new ShapeMaker());shapeMaker->drawCircle();shapeMaker->drawRectangle();shapeMaker->drawSquare();
#endifcout << "Over!\n";return 0;
}

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

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

相关文章

Grounding DINO、TAG2TEXT、RAM、RAM++论文解读

提示&#xff1a;Grounding DINO、TAG2TEXT、RAM、RAM论文解读 文章目录 前言一、Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection1、摘要2、背景3、部分文献翻译4、贡献5、模型结构解读a.模型整体结构b.特征增强结构c.解码结构 6、实…

使用Sourcetrail解析C项目

阅读源码的工具很多&#xff0c;今天给大家推荐一款别具一格的源码阅读神器。 它就是 Sourcetrail&#xff0c;一个免费开源、跨平台的可视化源码探索项目 使用

释放深度学习的力量:使用 CUDA 和 Turing GPU 构建 AI

深度学习是一种人工智能的分支,它使用神经网络模拟人类大脑的学习过程,从大量的数据中学习特征和规律。深度学习已经彻底改变了无数领域,从图像和语音识别到自然语言处理和自动驾驶汽车。但是,要充分利用深度学习的强大功能,需要强大的工具,而 NVIDIA 的 Turing GPU 就是…

Faster R-CNN pytorch源码血细胞检测实战(二)数据增强

Faster R-CNN pytorch源码血细胞检测实战&#xff08;二&#xff09;数据增强 文章目录 Faster R-CNN pytorch源码血细胞检测实战&#xff08;二&#xff09;数据增强1. 资源&参考2. 数据增强2.1 代码运行2.2 文件存放 3 数据集划分4. 训练&测试5. 总结 1. 资源&参…

静态SOCKS5的未来发展趋势和新兴应用场景

随着网络技术的不断发展和进步&#xff0c;静态SOCKS5代理也在不断地完善和发展。未来&#xff0c;静态SOCKS5代理将会呈现以下发展趋势和新兴应用场景。 一、发展趋势 安全性更高&#xff1a;随着网络安全问题的日益突出&#xff0c;用户对代理服务器的安全性要求也越来越高…

AcWing 3425:小白鼠排队 ← 北京大学考研机试题

【题目来源】https://www.acwing.com/problem/content/3428/【题目描述】 N 只小白鼠&#xff0c;每只鼠头上戴着一顶有颜色的帽子。 现在称出每只白鼠的重量&#xff0c;要求按照白鼠重量从大到小的顺序输出它们头上帽子的颜色。 帽子的颜色用 red&#xff0c;blue 等字符串来…

c#下载微信跟支付宝交易账单

下载微信交易账单 //账单日期只能下载前一天的string datetime DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");string body "";string URL "/v3/bill/fundflowbill" "?bill_date" datetime;//生成签名认证var auth BuildAu…

nodejs 异步函数加 await 和不加 await 的区别

在 nodejs 中&#xff0c;异步函数加上 await 和不加 await 的区别在于函数的返回值。 当一个异步函数加上 await 时&#xff0c;它会暂停当前函数的执行&#xff0c;直到异步操作完成并返回结果。这意味着可以直接使用异步操作的结果&#xff0c;而不需要使用 .then() 方法或…

什么是私有云和私有云计算?

私有云也被称为本地云架构&#xff0c;部署在企业的内部数据中心。如今&#xff0c;越来越多的提供商提供自己的私有云服务&#xff0c;以增强甚至取代企业自己的私有云环境。 美国国家标准与技术研究所 (NIST) 对私有云的定义是&#xff1a;“云基础架构为单一组织置备并为其…

【华为鸿蒙系统学习】- HarmonyOS4.0开发|自学篇

​ &#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 HarmonyOS 4.0 技术介绍&#xff1a; HarmonyOS三大特征&#xff1a; 1.实现硬件互助&#…

Appium 并行测试多个设备

一、前置说明 在自动化测试中&#xff0c;经常需要验证多台设备的兼容性&#xff0c;Appium可以用同一套测试运例并行测试多个设备&#xff0c;以达到验证兼容性的目的。 解决思路&#xff1a; 查找已连接的所有设备&#xff1b;为每台设备启动相应的Appium Server&#xff1b…

docker的资源控制:

docker的资源控制&#xff1a; 对容器的使用宿主机的资源进行限制 cpu 内存 磁盘i/0 docker使用linux自带的功能cgroup control grouos是linux内核系统提供的一种可以限制&#xff0c;记录&#xff0c;隔离进程所使用的物理资源 control grouos是linux内核系统提供的一种可…

CSP-202309-2 坐标变换(其二)(模拟,c++,vector建二叉树)

计算机软件能力认证考试系统 问题描述 试题编号&#xff1a;202309-3试题名称&#xff1a;梯度求解时间限制&#xff1a;1.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 背景 西西艾弗岛运营公司近期在大力推广智能化市政管理系统。这套系统是由西西艾弗岛信息中心研发…

DAPP开发【11】IPFS星际文件管理系统【简介,实践看12】

IPFS&#xff08;InterPlanetary File System&#xff09;是一个点对点的分布式文件系统&#xff0c;旨在创建一个更快速、更安全和更开放的 Web。它不同于传统的 HTTP 协议&#xff0c;因为它不需要使用一个固定的地址来访问文件&#xff0c;而是通过一个基于内容寻址的系统&a…

HeartBeat监控Mysql状态

目录 一、概述 二、 安装部署 三、配置 四、启动服务 五、查看数据 一、概述 使用heartbeat可以实现在kibana界面对 Mysql 服务存活状态进行观察&#xff0c;如有必要&#xff0c;也可在服务宕机后立即向相关人员发送邮件通知 二、 安装部署 参照章节&#xff1a;监控组件…

S32K324 UDS Bootloader开发-下位机篇-App软件开发

文章目录 前言ld文件修改增加编译文件CAN发送与接收发送接收函数调用UDS协议增加校验算法Hex文件合并总结前言 本文参考NXP官网的S32K3 Bootloader,移植实现UDS刷写功能。本文是APP软件的修改 本文参考NXP官网的S32K324 UBL,其中有一些Bug,也有一些和上位机不兼容的地方,在本…

每日一博 - 图解5种Cache策略

文章目录 概述读策略Cache AsideRead Through 写策略Write ThroughWrite AroundWrite Back 使用场景举例 概述 缓存是在系统中存储数据的临时存储器&#xff0c;用于提高访问速度。缓存策略定义了如何在缓存和主存之间管理数据 读策略 Read data from the system: &#x1f5…

vue3原生方法滚动列表

效果图 代码 import { ref, onBeforeUnmount, onUnmounted } from "vue"; //定时器初始化 let timer ref(null); //ref绑定初始化 let roll ref(null); //等同于vue2中的beforeDestroy onBeforeUnmount(() > {//清除定时器clearTimeout(timer.value); }); //等同…

AGI时代探导开发的智能化落地之路:中国企业低代码及无代码应用价值报告V6

今天分享的AGI系列深度研究报告&#xff1a;《AGI时代探导开发的智能化落地之路&#xff1a;中国企业低代码及无代码应用价值报告V6》。 &#xff08;报告出品方&#xff1a;甲子光年智库&#xff09; 报告共计&#xff1a;47页 点击添加图片描述&#xff08;最多60个字&…

机器学习与人工智能:一场革命性的变革

机器学习与人工智能&#xff1a;一场革命性的变革 人工智能的概述什么是机器学习定义解释 数据集结构机器学习应用场景 人工智能的概述 1956年8月&#xff0c;在美国汉诺斯小镇宁静的达特茅斯学院中&#xff0c;约翰麦卡锡&#xff08;John McCarthy&#xff09;、马文闵斯基&…