设计模式之代理模式(Proxy)的C++实现

这篇具有很好参考价值的文章主要介绍了设计模式之代理模式(Proxy)的C++实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、代理模式的提出

在组件的开发过程中,有些对象由于某种原因(比如对象创建的开销很大,或者对象的一些操作需要做安全控制,或者需要进程外的访问等),会使Client使用者在操作这类对象时可能会存在问题:(1)使用者直接访问这种对象会使系统带来很多麻烦。(2)或者使用者使不能直接访问这类对象;使用代理模式就可以解决此类问题。代理模式是在实际操作类和Client使用者之间增加一个代理类,实际操作类的一些操作,比如对象创建、接口访问、安全控制等相关操作都可以在增加的代理类里面添加相关的功能代码。这样Client实际上是通过代理类来访问和操作实际类。

2、需求描述

有一个主题类,该类具有请求功能和数据转换功能。而Client使用者不能直接访问和操作它,只能间接的通过其它类进行访问操作。

3、代理模式的代码实现

(1)代码UML图如下:

设计模式之代理模式(Proxy)的C++实现,设计模式,设计模式,代理模式

(2)代码实现如下:

#include <iostream>

class AbsSubject
{
public:
    virtual void request()=0;
    virtual void dataTransfer()=0;

    virtual ~AbsSubject(){};
};

class RealSubject:public AbsSubject
{
public:
    virtual void request() override
    {
        std::cout << "RealSubject request" << std::endl;
    };

    virtual void dataTransfer() override
    {
        std::cout << "RealSubject dataTransfer" << std::endl;
    }
};

class Proxy:public AbsSubject
{
private:
    RealSubject* realSubject{nullptr};
public:
    Proxy()
    {
        realSubject = new RealSubject();
    };
    virtual void request() override
    {
        if(nullptr == realSubject)
        {
            return;
        }
        std::cout << "Proxy request" << std::endl;
        realSubject->request();
    };

    virtual void dataTransfer()override
    {
        if(nullptr == realSubject)
        {
            return;
        }
        std::cout << "Proxy dataTransfer" << std::endl;
        realSubject->dataTransfer();
    };

    virtual ~Proxy()
    {
        std::cout << " ~Proxy" << std::endl;
        if(nullptr != realSubject)
        {
            delete realSubject;
            realSubject = nullptr;
        }
    }
};

class Client
{
public:
    void DoWork()
    {
        //创建代理对象
        Proxy proxy;
        //通过代理对象来访问实际对象的接口
        proxy.request();
        proxy.dataTransfer();
    }
};

int main()
{
    Client obj;
    obj.DoWork();
    return 0;
}

运行结果如下:

设计模式之代理模式(Proxy)的C++实现,设计模式,设计模式,代理模式

4、代理模式缺点

系统中类数量增加;由于增加代理类,访问实际类的速度会在某种程度上降低。增加系统复杂度。

5、代理模式优点

可以访问不能访问的对象;降低系统直接的耦合度,便于功能扩展。

关于代理模式的介绍也可参考:

设计模式之代理模式(C++实现)_墨1024的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-664687.html

到了这里,关于设计模式之代理模式(Proxy)的C++实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式--代理模式(Proxy Pattern)

    代理模式(Proxy Pattern)是一种结构型设计模式,它允许一个对象(代理)充当另一个对象(真实对象)的接口,以控制对该对象的访问。代理对象可以在访问真实对象之前或之后执行一些操作,从而增强或限制真实对象的行为。 代理模式的主要目的是为了控制访问,而不是

    2024年02月10日
    浏览(40)
  • 设计模式-7--代理模式(Proxy Pattern)

    代理模式(Proxy Pattern)是一种结构型设计模式,它允许一个对象(代理)充当另一个对象(真实对象)的接口,以控制对该对象的访问。代理对象可以在访问真实对象之前或之后执行一些操作,从而增强或限制真实对象的行为。 代理模式的主要目的是为了控制访问,而不是

    2024年02月10日
    浏览(46)
  • 设计模式——1_6 代理(Proxy)

    诗有可解不可解,若镜花水月勿泥其迹可也 —— 谢榛 为其他对象提供一种代理以控制对这个对象的访问 某天,你突发奇想,想做一个可以展示指定文件夹内所有图片的桌面应用。这个应用很简单,遍历文件夹,发现图片文件,把图片加载到GUI上的图片列表里,显示图片名和

    2024年01月25日
    浏览(45)
  • 设计模式- 代理模式(Proxy Pattern)结构|原理|优缺点|场景|示例

                                        设计模式(分类)        设计模式(六大原则)        创建型(5种)         工厂方法         抽象工厂模式        单例模式        建造者模式        原型模式     结构型(7种)      

    2024年04月24日
    浏览(42)
  • C++ 设计模式之代理模式

    【提示:如果不想看文字介绍,可以直接跳转到C++编码部分】 【简介】什么是代理模式         代理模式  Proxy Pattern  是⼀种 结构型设计模式 ,⽤于控制对其他对象的访问。在代理模式中,允许⼀个对象(代理)充当另⼀个对象(真实对象)的接⼝,以控制对这个对象

    2024年01月16日
    浏览(37)
  • C++设计模式-- 2.代理模式 和 外观模式

    代理模式的定义: 为其他对象提供一种代理以控制对这个对象的访问 。在某些情况下,一个对象不适合 或不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 代理模式有以下三种角色: Subject(抽象主题角色) :真实主题与代理主题的共同

    2024年01月17日
    浏览(36)
  • C++设计模式结构型之代理模式

    一、概述     代理模式是一种结构型模式,在很多不同的场合具有广泛的分类和应用。其主要实现的思想是在客户端和真正要访问的对象之间引入一个 代理对象(间接层),于是,以往客户端对真正对象的访问现在变成了通过代理对象进行访问,代理对象在这里起到了一个

    2024年02月13日
    浏览(42)
  • 用Rust实现23种设计模式之 代理模式

    代理模式是一种结构型设计模式,它允许通过代理对象来控制对真实对象的访问。以下是代理模式的优点和使用场景: 控制访问 :代理模式可以控制对真实对象的访问,可以在访问前后进行一些额外的操作,如权限验证、缓存等。 解耦和灵活性 :代理模式将客户端与真实对

    2024年02月14日
    浏览(43)
  • (二)结构型模式:8、代理模式(Proxy Pattern)(C++示例)

    目录 1、代理模式(Proxy Pattern)含义 2、代理模式的UML图学习 3、代理模式的应用场景  4、代理模式的优缺点 5、C++实现代理模式的实例 1、代理模式(Proxy Pattern)含义 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。 代理模式(Proxy Pattern)是一种结构

    2024年02月12日
    浏览(39)
  • 设计模式:命令模式(C++实现)

    命令模式(Command Pattern)是一种行为设计模式,它将请求封装成一个对象,从而使您可以使用不同的请求对客户端进行参数化。这使得客户端可以独立于具体的请求和接收者对请求进行操作。 以下是一个简单的C++命令模式的示例: 在上述示例中,Command是命令的基类,定义了

    2024年02月07日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包