首页 > 其他分享 >04: 代理模式

04: 代理模式

时间:2024-09-16 13:01:43浏览次数:1  
标签:std 04 void 代理 模式 spGiveGift Proxy shared ptr

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();

标签:std,04,void,代理,模式,spGiveGift,Proxy,shared,ptr
From: https://www.cnblogs.com/BoYuCG/p/18416201

相关文章

  • UDP加速与代理加速的不同之处
    在网络通信领域,UDP(用户数据报协议)加速与代理加速是两种常见的优化网络性能的技术手段。尽管它们的目标都是提高数据传输的速度和效率,但在实现方式、应用场景以及性能特点上存在着显著的差异。本文将详细探与代理加速的不同之处。一、UDP加速1.定义与特点UDP(UserDatagramP......
  • 03: 装饰模式
    1.案例:手机->贴膜->戴保护套->贴卡通贴纸->系手机挂绳2.组合模式和装饰模式组合模式和装饰模式都可以用来透明的把对象包装在具有同样接口的另一个对象中。组合模式和装饰模式都是结构型模式。组合模式着眼于把众多子对象组织为一个整体;装饰模式着眼于在不修改现有对象或从其......
  • HTTP Status 404 – Not Found Docker Tomcat Image
    这没有错误,由于Docker社区提出的安全问题,它被设计为具有这样的行为。您可以在DockerHub中的Tomcat镜像官方文档中找到有关安全性的信息。根据社区请求,Webapps文档夹将移动到webapps.dist文档夹,这意味着webapps文档夹为空,并且浏览器上没有要提供的文档。这时,您会看......
  • Gradle配置代理
    在gradle.properties文件中添加如下配置:配置httpproxy:systemProp.http.proxyHost=www.somehost.orgsystemProp.http.proxyPort=8080systemProp.http.proxyUser=useridsystemProp.http.proxyPassword=passwordsystemProp.http.nonProxyHosts=*.nonproxyrepos.com|localho......
  • 02策略模式
    1.案例:营业员根据客户所购买商品的单价和数量,根据不同活动向客户收费**-正常原价收费-八折收费-满300返1002.策略模式结构-抽象策略类(Stategy):声明算法的方法,抽象层的设计使上下文类可以无差别的调用不同的具体策略的方法enumCashType{NORMAL=0,RE......
  • 简单工厂模式
    1.案例:营业员根据客户所购买商品的单价和数量,根据不同活动向客户收费-正常原价收费-八折收费-满300返1002.简单工厂模式结构-抽象产品(AbstractProduct):具体产品类的基类,包含创建产品的公共方法enumCashType{NORMAL=0,REBATE,RETURN};class......
  • MYSQL面试系列-04
    MYSQL面试系列-0417.关于redolog和binlog的刷盘机制、redolog、undolog作用、GTID是做什么的?innodb_flush_log_at_trx_commit及sync_binlog参数意义双117.1innodb_flush_log_at_trx_commit该变量定义了InnoDB在每次事务提交时,如何处理未刷入(flush)的重做日志信息......
  • 左叶子之和-404
    题目描述给定二叉树的根节点root,返回所有左叶子之和。解题思路这里我才用的是前序遍历,我们在遍历的时候因为是要手机左叶子节点,所以我们就不能等到遍历当前节点的时候再去做判断,应该遍历到一个节点的时候就对其下一个节点的左右子树进行判断,这样才能确保我们得到的是我们的左......
  • Ubuntu 18.04搭建RISCV和QEMU环境
    Ubuntu18.04搭建RISCV和QEMU环境  原文:https://blog.csdn.net/Eng_ingLi/article/details/135285200 前言因为公司项目代码需要在RISCV环境下测试,因为没有硬件实体,所以在Ubuntu18.04上搭建了riscv-gnu-toolchain+QEMU模拟器环境。安装riscv-gnu-toolchainriscv......
  • Android中的单例模式
    在Android开发中,单例模式(SingletonPattern)是一种常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。单例模式在需要控制资源访问、管理共享资源或配置信息的场景下特别有用。在Android中,实现单例模式的方法有多种,但主要思想是一致的:私有化构造函数,......