04: 代理模式

news/2024/11/16 1:40:03/文章来源:https://www.cnblogs.com/BoYuCG/p/18416201

1. 案例: B帮助A追求C

2. 代理模式结构

 - Subject(抽象主题角色): 声明了代理主题角色和真实主题角色共同接口;

class GiveGift
{
public:virtual void GiveDolls() = 0;virtual void GiveFlowers() = 0;virtual void GiveChocolate() = 0;
};

- RealSubject(真实主题角色):是代理主题角色所代表的真实对象,提供真正的业务操作;

class Pursuit :public GiveGift
{
public:// 通过 GiveGift 继承void GiveDolls() override;void GiveFlowers() override;void GiveChocolate() override;
};void Pursuit::GiveDolls()
{std::cout << "Pursuit送洋娃娃" << std::endl;
}void Pursuit::GiveFlowers()
{std::cout << "Pursuit送鲜花" << std::endl;
}void Pursuit::GiveChocolate()
{std::cout << "Pursuit送巧克力" << std::endl;
}

- Proxy(代理主题角色): 代理主题角色通过关联关系引用真实主题角色,可以控制和操纵真实主题对象,同时还可以在调用真实主题对象操作之前或之后增加新的服务和功能;

class Proxy :public GiveGift
{
public:Proxy(std::shared_ptr<GiveGift> spGiveGift);// 通过 GiveGift 继承void GiveDolls() override;void GiveFlowers() override;void GiveChocolate() override;private:std::shared_ptr<GiveGift> m_spGiveGift;
};Proxy::Proxy(std::shared_ptr<GiveGift> spGiveGift):m_spGiveGift(spGiveGift)
{
}void Proxy::GiveDolls()
{m_spGiveGift->GiveDolls();
}void Proxy::GiveFlowers()
{m_spGiveGift->GiveFlowers();
}void Proxy::GiveChocolate()
{m_spGiveGift->GiveChocolate();
}

- 客户端

class GiveGift;
class SchoolGirl
{
public:void SetGiveGift(std::shared_ptr<GiveGift> spGiveGift);void Request();
private:std::shared_ptr<GiveGift> m_spGiveGift;
};void SchoolGirl::SetGiveGift(std::shared_ptr<GiveGift> spGiveGift)
{m_spGiveGift = spGiveGift;
}void SchoolGirl::Request()
{m_spGiveGift->GiveChocolate();m_spGiveGift->GiveDolls();m_spGiveGift->GiveFlowers();
}

3. 用法

    std::shared_ptr<Proxy> spProxy = std::make_shared<Proxy>(std::make_shared<Pursuit>());std::shared_ptr<SchoolGirl> spSchoolGirl = std::make_shared<SchoolGirl>();spSchoolGirl->SetGiveGift(spProxy);spSchoolGirl->Request();

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

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

相关文章

DAS安装失败之This product requires Administrator Privileges

使用管理员权限安装DAS仍然失败,可能是Server服务被优化禁用了,导致软件调用的检测管理员权限方法失败,从而“错误”地认为没有开启管理员权限。 在服务中开启或者注册表中修改LanmanServer启动选项,就可以成功安装了。版权声明:未经本人授权禁止转载,转载时请注明原博客…

用笔记来记录遇到的问题:发布版本和非发布版本遇到的问题

这两天接到一个任务,把中秋节的的宣传广告发到app上去。 没想到一个项目运营了这么久,竟然没有这种功能 我给他们做了3个: 开屏广告、首页弹出广告和客服机器人形象换成小兔子。 搞完之后,我发布版本给他们测试 谁知道我本地运行得好好的,为啥发布给他们的版本没有效果! …

在线打字练习网站【巧手打字通】使用教程

巧手打字通是一个专为打字初学者,特别是中小学生量身设计的在线打字练习平台。该平台通过科学、有趣且高效的教学方式,帮助用户快速掌握打字技巧,提升打字速度和准确率。 本文提供了整套的从入门到精通的各类课程简介,包括:认识键盘,科普,入门课程,学拼音,学英语,读诗…

Nuxt Kit 中的上下文处理

title: Nuxt Kit 中的上下文处理 date: 2024/9/16 updated: 2024/9/16 author: cmdragon excerpt: Nuxt Kit 提供的上下文处理工具,尤其是 useNuxt 和 tryUseNuxt,为模块化开发提供了极大的便利。通过这些函数,开发者可以方便地访问 Nuxt 实例,从而更好地管理应用配置。 …

佩戴安全帽 人员聚集识别

佩戴安全帽人员聚集识别借助现场已经安装的监控摄像机实时监控现场画面,识别职工是不是戴安全帽,是不是人员聚集状态,进而发送警示和提醒。佩戴安全帽人员聚集识别系统选用最新神经网络算法和边缘计算,可以代替人的双眼,全自动识别各种各样违规操作如:反光衣穿戴识别、安…

安全帽佩戴检测摄像头

安全帽佩戴检测摄像头借助现场已有的监控摄像头或者专门安装内置算法的监控摄像头,对现场人员安全帽佩戴进行实时识别检测。安全帽佩戴检测摄像头通过RTSP协议访问摄像机视频流,实时获取分析。立即识别视频监控区域未戴安全帽的工人,并实时分析抓拍警报。安全帽佩戴检测摄像…

反光衣穿戴识别系统介绍

反光衣穿戴识别系统依据深度学习+边缘计算视觉分析技术,利用已有的摄像头对现场作业人员穿戴实时分析和识别视频图像数据。不用人工干预,反光衣穿戴识别系统全天候24h不间断对作业现场实时监控,当检测出工人不穿反光衣时,及时抓拍提醒并把违规信息发送给系统后台,反光衣穿…

学校食堂视频监控分析系统

学校食堂视频监控分析系统利旧现场已有的监控摄像头,可以对学校后厨识别监控厨师是否佩戴厨师帽厨师服、有无戴口罩、违规抽烟、陌生人进到后厨以及后厨出现老鼠猫狗等,并及时抓拍预警、后台推送违规图像信息。学校食堂视频监控分析系统智能实时分析产生的违规抓拍、对接并自…

摄像机识别未戴安全帽

摄像机识别未戴安全帽系统利用边缘计算+机器学习与深度学习技术,摄像机识别未戴安全帽系统借助现场部署的监控摄像机RTSP协议访问摄像机视频流,实时获取,实时分析,实时报警,并且抓拍人像分析人员信息、识别是不是戴安全帽、同歩声音报警,将报警信息快照和报警视频存入数据…

秸秆焚烧监控系统

秸秆焚烧监控系统通过现场通信铁塔基站上架设高空高像素监控摄像头,进行周边地域360度全天候24小时不间断实时监控,秸秆焚烧监控系统通过RTSP协议访问摄像机视频流,实时获取抓拍现场视频流画面实时分析,并且自动识别秸秆焚烧行为现象,实时报警并且将违规画面传回监控后台。…

加油站智能监控系统改造解决方案

加油站智能监控系统改造解决方案针对加油区、卸油区工作人员睡岗、工作时间抽烟、打电话等违反规定行为、明火烟雾、扬尘等异常现象,加油站智能监控系统改造解决方案针对卸油区:灭火器材置放不合理,卸油时工作人员换岗,静电释放时长不够,开展智能分析识别。如系统发现上述…

秸秆焚烧监测系统

秸秆焚烧监控系统智能监测预警能实时监测监控摄像头画面范围内的田地,当秸秆焚烧监控系统发现现场监控摄像头监控画面中出现焚烧现象时,系统马上识别分析处理数据同步给监控管理后台,并自动将焚烧预警息并传送给相关负责人,这样可以第一次接到报警后可以立即发现阻止违规行…