您的位置:首页 > 其它

大话设计模式-Study-Tips-第四章-代理模式

2017-08-09 15:10 543 查看
一、UML图



二、包含的角色

Suject类,定义了RealSubject和Proxy的共用接口

RealSubject类,定义了Proxy所代理的真实实体

Proxy类,代理类。

三、特点

定义:代理模式(Proxy)为其他对象提供一种代理,用来控制对这个对象的访问。

应用场合:

(1)远程代理,为一个对象在不同地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。

(2)虚拟代理,根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。

(3)安全代理,用来控制真实对象访问时候的权限

(4)智能指引,调用真实对象时候,代理处理另外的事情。

四、代码实现

c#版

Suject类

public abstract class Subject {
public abstract void Request();
}


RealSubject类

public class RealSubject : Subject
{
public override void Request()
{
Console.WriteLine("RealRequst");
}
}
Proxy类

public class Proxy : Subject
{
private RealSubject realSubject ;
public override void Request()
{
if (realSubject == null)
{
realSubject = new RealSubject();
}
realSubject.Request();
}
}
调用方式

Proxy proxy = new Proxy();
proxy.Request();
Console.Read();


c++版

Subject类

class Subject {
public:
virtual void Request();
};
RealSubject类

class RealSubject : public Subject {
public:
void Request();
};
#include "RealSubject.h"
#include <iostream>

void RealSubject::Request() {
printf("RealRequst");
}


Proxy类
#include "Suject.h"
#include "RealSubject.h"

class Proxy : public Subject {
public:
void Request();
private:
RealSubject* realSubject;
};
#include "Proxy.h"

void Proxy::Request() {
{
if (realSubject == NULL)
{
realSubject = new RealSubject();
}
realSubject->Request();
}


调用方式

int main()
{
Proxy* proxy = new Proxy();
proxy->Request();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: