UML类图:
核心思想:
#include<iostream>
using namespace std;
// 1. Subject类中定义RealSubject类和Proxy类的公共接口
class Subject
{
public:
virtual void func1() = 0;
};
//2. 然后分别在RealSubject类和Proxy类中去实现这些接口
class RealSubject :Subject
{
public:
void func1()override
{
cout << "执行func1" << endl;
}
};
class Proxy :Subject
{
RealSubject realSubject;
public:
void func1()override
{
realSubject.func1();
}
};
int main()
{
Proxy proxy;
//表面上调用的是Proxy类中的func1,实际上调用的是RealSubject类中的func1,实现了代理
//由此可见,只要是想通过代理来执行某个实例的函数,只需要在Subject类中定义相应的接口,然后在具体类RealSubject和代理类Proxy中去实现相应的接口,就可以通过代理去执行相应的函数。
proxy.func1();
return 0;
}
优点:
- 职责清晰
具体的类就是实现实际的业务逻辑,不用关心其他非本职责的事务,甚至都不需要创建相应的对象来调用类中接口,只需要通过后期的代理完成一件事务,附带的结果就是编程简洁清晰。 - 高扩展性
具体主题角色是随时都会发生变化的,只要它实现了接口,甭管它如何变化,那我们的代理类完全都可以在不做任何修改的情况下使用。 - 代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
使用场景:
我相信第一次接触到代理模式的读者肯定很郁闷,为什么要用代理呀?想想现实世界吧,打官司为什么要找个律师?因为你不想参与中间过程的是是非非,只要完成自己的答辩就成,其他的比如事前调查、事后追查都由律师来搞定,这就是为了减轻你的负担。