代理模式(Proxy):为其它对象提供一种代理以控制这个对象的访问。
代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
UML类图:

模式说明:
Subject
抽象主题,定义了真实实体(RealSubject)和代理(Proxy)公共接口。
RealSubject
表示代理所代表的真实实体。
Proxy
真实实体的代理,提供了与抽象主题(Subject)同样的接口。在其中实现对真实实体(RealSubject)的具体操作。
代理模式基本代码:
/********************************************************************
filename: Proxy.h
created: 2012-09-28
author: firehood
purpose: firehood 学设计模式之---代理模式
*********************************************************************/
#pragma once
#include <assert.h>
#include <iostream>
using namespace std;
// 抽象主题
class Subject
{
public:
Subject(void){};
virtual ~Subject(void){}
virtual void Request(void) = 0;
};
// 真实主题
class RealSubject: public Subject
{
public:
RealSubject(void){};
virtual ~RealSubject(void){}
virtual void Request(void)
{
cout<<"Real Request"<<endl;
}
};
// 代理类
class Proxy: public Subject
{
public:
Proxy(Subject *pSubject):m_pSubjuct(NULL)
{
assert(pSubject);
m_pSubjuct = pSubject;
}
~Proxy(void){}
virtual void Request(void)
{
m_pSubjuct->Request();
}
private:
Subject *m_pSubjuct;
};
客户端调用代码:
#include "Proxy.h"
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
cout<<"*************************************"<<endl;
cout<<"firehood 学设计模式之---代理模式"<<endl;
cout<<"*************************************"<<endl;
Proxy *pPropy = new Proxy(new RealSubject());
pPropy->Request();
delete pPropy;
system("pause");
return 0;
}
运行结果:
*************************************
firehood 学设计模式之---代理模式
*************************************
Real Request
请按任意键继续. . .
本文介绍了代理模式的概念及其在软件设计中的应用。通过一个简单的示例,展示了如何使用代理模式来控制对真实对象的访问,并提供了相应的UML类图及C++实现代码。
5269

被折叠的 条评论
为什么被折叠?



