Charpter07 代理模式

代理模式简介

代理模式(proxy)为其他对象提供了一种代理以控制对这个对象的访问。

代理模式的应用:

  1.远程代理:也就是为一个对象在不同的地址空间提供据图代表。这样可以隐藏一个对象存在于不同地址空间的事实。比如VPN

  2.虚拟代理:是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的实例对象。比如打开网页时,图片不是一下全部下载下来,而是随着你的浏览,逐步下载。

  3.安全代理:用来控制真是对象访问时的权限,一般用于对象具有不同的访问权限的时候。

  4.智能指引是指当调用真实的对象时,代理处理另外的一些事。比如智能指针

代理模式UML图

 Subject类,定义了RealSubject和Proxy的共用接口,这样就在任何使用Realsubject的方法都可以使用Proxy。

C++代码示例

//Subject类,定义代理类和被代理类的接口
#ifndef _SUBJECT_HPP
#define _SUBJECT_HPP

class Subject{
    public:
    virtual void method1() = 0;
    virtual void method2() = 0;
};
#endif
//被代理类RealSubject,含具体实现
#ifndef _REALSUBJECT_HPP
#define _REALSUBJECT_HPP

#include<iostream>
#include"subject.hpp"
class RealSubject : public Subject{
    public:
    void method1() override {
        std::cout<< "realsubject.method1() is called"<<std::endl;
    }
    void method2()override {
        std::cout << "realsubject.method2() is called"<<std::endl;
    }
};
#endif
//代理类Proxy
#ifndef _PROXY_HPP
#define _PROXY_HPP

#include"realsubject.hpp"
#include"subject.hpp"

class Proxy : public Subject{
public:
    void method1() override{
        realsubject.method1();
    }
    void method2() override{
        realsubject.method2();
    }

private:
    RealSubject realsubject;
};

#endif
//客户端代码
#include"proxy.hpp"
int main(){
    Proxy proxy;
    proxy.method1();
    proxy.method2();
    getchar();
    return 0;
}

运行结果

猜你喜欢

转载自www.cnblogs.com/yb-blogs/p/12502979.html