一、 代理(Proxy)模式
代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。
作用:
为其他对象提供一种代理以控制对这个对象的访问。
UML结构图:
抽象基类:
1)Subject:定义了Proxy和RealSubject的公有接口,这样就可以在任何需要使用到RealSubject的地方都使用Proxy.
解析:
Proxy其实是基于这样一种时常使用到的技术-某个对象直到它真正被使用到的时候才被初始化,在没有使用到的时候就暂时用Proxy作一个占位符.这个模式实现的要点就是Proxy和RealSubject都继承自Subject,这样保证了两个的接口都是一致的.
#ifndef PROXY_H_
#define PROXY_H_
class Subject
{
public:
Subject(){}
virtual ~Subject(){}
virtual void Request() = 0;
};
class RealSubject : public Subject
{
public:
RealSubject();
virtual ~RealSubject();
virtual void Request();
};
class Proxy : public Subject
{
public:
Proxy();
virtual ~Proxy();
virtual void Request();
private:
Subject* m_pRealSubject;
};
#endif
#include "stdafx.h"
#include "Proxy.h"
#include <iostream>
using namespace std;
RealSubject::RealSubject()
{
cout<<"RealSubject::RealSubject"<<endl;
}
RealSubject::~RealSubject()
{
cout<<"RealSubject::~RealSubject"<<endl;
}
void RealSubject::Request()
{
cout<<"RealSubject::Request"<<endl;
}
Proxy::Proxy(): m_pRealSubject(NULL)
{
cout<<"Proxy::Proxy"<<endl;
}
Proxy::~Proxy()
{
delete m_pRealSubject;
m_pRealSubject = NULL;
cout<<"Proxy::~Proxy"<<endl;
}
void Proxy::Request()
{
if (NULL == m_pRealSubject)
{
m_pRealSubject = new RealSubject;
cout<<"Proxy::Request"<<endl;
}
m_pRealSubject->Request();
}
#include "stdafx.h"
#include <stdlib.h>
#include "Proxy.h"
int _tmain(int argc, _TCHAR* argv[])
{
Proxy* lpProxy = NULL;
lpProxy = new Proxy;
lpProxy->Request();
delete lpProxy;
lpProxy = NULL;
system("pause");
return 0;
}