代理模式属于结构型模式
客户不想直接访问一个对象,通过一个代理进行间接访问。
但是又区别于外观,外观是对多个子系统抽象,而代理是间接访问,重点强调间接,外观重点强调抽象统一外观。
定义:给某个对象提供一个代理,并由代理控制原对象的引用。对象结构型模式。
实现demo:
main.cpp
#include <iostream>
#include "RealSubject.h"
#include "Proxy.h"
using namespace std;
int main (int argc , char * argv[])
{
//创建代理对象
Proxy proxy;
//代理对象发起动作,引入真实对象
proxy.request();
return 0;
}
Proxy.h
/************************************
**Proxy.h
**
**
************************************/
#ifndef __PROXY_H__
#define __PROXY_H__
//真实对象
#include "RealSubject.h"
//抽象主题,用于生成真实对象和代理对象
#include "Subjetct.h"
class Proxy : public Subject{
public:
Proxy();
virtual ~Proxy();
void request();
private:
void afterRequest();
void PreRequest();
//真实对象 被代理者
RealSubject * m_realsubject;
}
#endif
Proxy.cpp
#include "Proxy.h"
#include <iostream>
using namespace std;
Proxy::Proxy(){
m_realsubject = new RealSubject();
}
Proxy::~Proxy(){
delete m_realsubject;
}
void Proxy::afterRequest(){
cout << "Proxy::afterRequest" << endl;
}
void Proxy::preRequest(){
cout << "Proxy :: prerequest" <<endl;
}
void Proxy::request(){
preRequest();
m_realrequest->request();
afterRequest();
}
优缺点
优点:
1、降低耦合度
2、小对象代表大对象、
3、远程代理---》比如开发机和服务器之间代理、内网外网隔离
缺点:增加复杂度、增加了代理对象