proxy代理模式详解 (proxy代理参数获取)

意图

代理模式是一种结构型设计模式。他为其他对象提供一种代理以控制对这个对象的访问。

结构

proxy系统代理怎么开,proxy代理跨域原理

代理模式结构图

代码示例

#include <iostream>
#include <memory>
#include <string>
// 抽象主题
class Subject {
public:
    Subject() {}
    virtual ~Subject() {}

    virtual void Request() = 0;
};

// 真实主题
class RealSubject : public Subject {
public:
    using Ptr = std::shared_ptr<RealSubject>;
    RealSubject() : Subject() {}
    virtual ~RealSubject() {}
    
    void Request() override {
        std::cout << "Real subject request!" << std::endl;
    }
};

// 代理
class Proxy : public Subject {
public:
    using Ptr = std::shared_ptr<Proxy>;
    Proxy() : Subject() {}
    virtual ~Proxy() {}

    void Request() override {
        if (_realSubject.get() == nullptr) {
            _realSubject.reset(new RealSubject());
        }
        DoProxy();
        _realSubject->Request();
    }

    void DoProxy() {
        std::cout << "I'm doing proxy!" << std::endl;
    }
private:
    RealSubject::Ptr _realSubject = nullptr;
};

// use it!
int main() {
    Proxy::Ptr proxy(new Proxy());
    proxy->Request();
    return 0;
}

proxy系统代理怎么开,proxy代理跨域原理

运行结果

适用性

  1. 远程代理,为一个对象在不同的地址空间提供局部代表;
  2. 虚代理,根据需要创建开销很大的对象;
  3. 保护代理,控制对原始对象的访问;保护代理用于对象应该有不同的访问权限的时候;
  4. 智能指引取代了简单的指针,它在访问对象时执行一些附加操作:
  • 对指向实际对象的引用计数,这样当该对象没有引用时,可以自动释放它(也称为智能指针);
  • 当第一次引用一个持久对象时,将它装入内存;
  • 在访问一个实际对象前,检查是否已经锁定了它,以确保其他对象不能改变它。