一 应用场景
相亲的时候一般有一个媒人,男方说什么话都通过媒人传递给女方。
二 定义
代理模式Proxy Pattern:给某个对象提供一个代理,并由代理对象控制对原对象的引用,代理对象是一种对象结构模式。
Subject 抽象主题角色:声明真实主题和代理主题的共同接口,使得在任何使用真实主题的地方都可以使用代理主题,客户端通常都要针对抽象主题进行编程。
Proxy 代理主题角色:代理主题包含了对真实主题角色的引用,从而可以在任何时候都代替真实的主题,并对真实的主题加以约束。
RealSubject 真实主题:代理角色所代表的真实对象,实现真实的业务操作。
通常有:远程代理、虚拟代理、保护代理、缓冲代理、智能引用代理。
三 C++实现一个代理模式
Subject.h
#pragma once
class Subject
{
public:
Subject(){}
virtual ~Subject(){}
virtual void saySth() = 0;
};
Boy.h
#pragma once
#include <iostream>
#include "Subject.h"
using namespace std;
class Boy:public Subject
{
public:
Boy(){}
virtual ~Boy(){}
void saySth(){
std::cout << "Boy love you" << std::endl;
}
};
ProxyBoy.h
#pragma once
#include "Boy.h"
class ProxyBoy
{
private:
Subject * s;
public:
ProxyBoy(Subject * _s):s(_s){}
virtual ~ProxyBoy(){}
void saySth(){
s->saySth();
}
};
main.cpp
#include <iostream>
#include <string>
#include "ProxyBoy.h"
int main()
{
ProxyBoy * p_b = new ProxyBoy(new Boy());
p_b->saySth();
system("pause");
return 0;
}
运行结果
四 总结
优点
1 代理模式能将代理对象与真正被调用的对象分离,在一定程度上降低了系统的耦合度。
2 可以为不同的用户提供不同的操作权限
3 增加代理时,无需修改源代码,符合开闭准则
缺点:
1 增加了一个代理层,会使系统变慢
2 代理模式可能会很复杂。