• Proxy(代理)-对象结构型模式


    1.意图

        为其它对象提供一种代理以控制对这个对象的访问。

    2.别名

        Surrogate.

    3.动机

        通过Proxy可以达到对一个对象的访问控制。

    4.适用性

    • 远程代理  为一个对象在不同地址空间提供局部代表。
    • 虚代理  根据需要创建开销很大的对象。
    • 保护代理 控制对原始对象的访问。
    • 智能指引 取代了指针,它在访问对象时执行一些附加操作。

    5.结构

        

    6.代码实例

         

    //Subject.h
    
    
    #include <memory>
    
    class Subject
    {
    public:
        virtual void Request() = 0;
    };
    
    
    class RealSubject : public Subject
    {
    public:
        void Request();
    };
    
    class Proxy : public Subject
    {
    public:
        Proxy();
        void Request();
    private:
        std::shared_ptr<Subject> m_pSubject;
    };
    //Subject.cpp
    
    
    #include <iostream>
    #include "Subject.h"
    
    
    
    void RealSubject::Request()
    {
        std::cout<<"RealSubject Request Exectued" << std::endl;
    }
    
    Proxy::Proxy()
    {
        m_pSubject = std::shared_ptr<Subject>(new RealSubject);
    }
    
    void Proxy::Request()
    {
        m_pSubject->Request();
    }
    //Client.cpp
    
    
    
    #include "Subject.h"
    
    int main()
    {
        std::shared_ptr<Subject> pProxy(new Proxy);
        pProxy->Request();
    
        while(1);
    }

    7.测试结果

        

    8.效果

    • 远程代理 可以隐藏一个对象存在于不同地址空间的事实。
    • 虚代理    可以进行最优化,例如根据要求创建对象。
    • 保护代理和智能引用  都允许在访问一个对象时有一些附加的内务处理。
  • 相关阅读:
    学习过程
    一个链表中包含环,请找出该链表的环的入口结点
    归并排序-递归实现
    31、求整数范围中1的个数
    冒泡排序
    常用的端口对应的协议
    数值的整数次方
    二分查找(折半查找)
    用两个队列模拟栈的弹出和输入
    Java源码-HashMap(jdk1.8)
  • 原文地址:https://www.cnblogs.com/mgp200866130/p/5578678.html
Copyright © 2020-2023  润新知