• C++设计模式---代理模式


    1、介绍

            代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一个代理或占位符,以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介的作用,可以隐藏目标对象的实现细节,增加额外的功能(如访问控制、日志记录、性能监控等),或者对目标对象的访问进行优化。

    代理模式组成部分:

            (1)目标对象(Real Subject):代理对象所代表的真实对象,是最终要引用的对象。

            (2)代理对象(Proxy):持有目标对象的引用,控制对目标对象的访问,并可能提供额外的功能。

            (3)客户端(Client):使用代理对象来访问目标对象,通常不会直接访问目标对象。

    代理模式的分类:

            (1)远程代理(Remote Proxy):为一个位于不同地址空间的对象提供一个本地的代理对象,这个对象作为该远程对象的代表,以隐藏一个对象存在于不同地址空间的事实。

            (2)虚拟代理(Virtual Proxy):根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象的引用,真实对象只在需要时才会被真正创建。

            (3)保护代理(Protect Proxy):控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的情况。

            (4)智能引用代理(Smart Reference Proxy):取代了简单的指针,它在访问对象时执行一些附加操作,比如将每一次的访问计数。

    2、示例

    1. #include
    2. using namespace std;
    3. // 抽象角色
    4. class subject
    5. {
    6. public:
    7. virtual void Request() = 0 {}
    8. };
    9. // 真实角色
    10. class Consubject:public subject
    11. {
    12. public:
    13. void Request(); //实现了在抽象角色中定义的方法
    14. };
    15. void Consubject::Request() //重载
    16. {
    17. cout << "ConRequest" << endl;
    18. }
    19. // 代理角色
    20. class Proxy
    21. {
    22. public:
    23. Proxy() {}
    24. Proxy(subject* sub)
    25. {
    26. m_sub = sub; //代理角色中定义了一个真实角色对象
    27. }
    28. ~Proxy()
    29. {
    30. delete m_sub;
    31. }
    32. void Request() //代理角色也实现了抽象角色的方法
    33. {
    34. cout << "Proxy REQ" << endl;
    35. m_sub->Request(); //代理角色调用真实角色的业务方法
    36. }
    37. private:
    38. subject* m_sub;
    39. };
    40. void main()
    41. {
    42. subject* sub = new Consubject(); //真实角色对象
    43. Proxy* p = new Proxy(sub); //定义代理对象
    44. p->Request();
    45. }

    结果:

    1. Proxy REQ
    2. ConRequest

  • 相关阅读:
    Discourse 如何在 header 上添加 HTML
    17、Spring系列-SpringMVC-请求源码流程
    NNDL 实验八 网络优化与正则化(2)批大小的调整
    招投标系统简介 企业电子招投标采购系统源码之电子招投标系统 —降低企业采购成本
    【Java UI】HarmonyOS 如何集成SlidingDrawer组件
    3.11-程序基本的控制语句 3.12-表达式 3.13-数据类型 3.14-常量/变量 3.15-标识符
    RCU Library
    JSTL和EL详细笔记
    00后会不会改变软件测试行业现状?
    Qt之天气预报——功能实现篇(含源码+注释)
  • 原文地址:https://blog.csdn.net/qq_34486832/article/details/139676866