04: 代理模式

news/2024/9/20 21:36:55

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.ryyt.cn/news/60973.html

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

相关文章

DAS安装失败之This product requires Administrator Privileges

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

多维数组

1.定义 以二维数组为例,即一个大数组里面包含了无数个小数组,只不过大数组里面的不再是数,而是数组,而小数组里面的是数字定义了一个二维数组arr[][]其中有三个小数组,三个小数组中存在数字 2.语法3.实操4.输出所有数 先定义一个二维数组,然后使用第一次for循环让二维数组…

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

这两天接到一个任务,把中秋节的的宣传广告发到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不间断对作业现场实时监控,当检测出工人不穿反光衣时,及时抓拍提醒并把违规信息发送给系统后台,反光衣穿…