c++设计模式—代理模式
来源:互联网 发布:linux系统用户创建 编辑:程序博客网 时间:2024/06/03 07:45
代理模式:
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。
Subject类,定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy。
RealSubject类,定义Proxy所代表的真实实体。
Proxy类,保存一个引用使用代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代理就可以代替实体。
代理模式代码:
#include<iostream>
usingnamespace std;
classSubject
{
public:
virtual void Request()=0;
};
classRealSubject:virtual public Subject
{
public:
void Request()
{
cout<<"真实实体请求!"<<endl;
}
};
classProxy:virtual public Subject
{
public:
Proxy():realsubject(NULL){}
void Request()
{
if(realsubject==NULL)
{
realsubject=newRealSubject();
}
realsubject->Request();
}
~Proxy()
{
if(realsubject!=NULL)
delete realsubject;
}
private:
RealSubject *realsubject;
};
intmain()
{
Proxy *pProxy=new Proxy();
pProxy->Request();
delete pProxy;
return 0;
}
代理模式的应用:
1) 远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
2) 虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
3) 安全代理:用来控制真实对象访问时的权限。
实例代码:
#include<iostream>
#include<string>
usingnamespace std;
classSend
{
public:
virtual void Request()=0;
};
classSender:virtual public Send //寄信人类(实体类)
{
public:
Sender():name(NULL),address(NULL){}
Sender(string name,stringaddress):name(name),address(address){}
void Request()
{
cout<<"此信件寄往:"<<address<<"—"<<"收件人:"<<name<<endl;
}
private:
string name;
string address;
};
classSendProxy:virtual public Send //快递公司(代理类)
{
public:
SendProxy():pSender(NULL){}
void Request()
{
cout<<"欢迎使用申通快递!"<<endl;
if(pSender==NULL)
{
string name,address;
cout<<"请输入您要寄往的地址和收件人姓名:"<<endl;
cin>>address>>name;
pSender=newSender(name,address);
}
pSender->Request();
cout<<"很高兴为您服务! 即将为您派送"<<endl;
}
~SendProxy()
{
if(pSender!=NULL)
delete pSender;
}
private:
Sender * pSender;
};
intmain()
{
SendProxy *pSendProxy=new SendProxy();
pSendProxy->Request();
delete pSendProxy;
return 0;
}
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式——代理模式(C++)
- 设计模式之代理模式(C++)
- 设计模式——代理设计模式
- 设计模式——代理设计模式
- 设计模式--【代理模式】
- 设计模式:代理模式
- 设计模式--代理模式
- 设计模式---代理模式
- C# Dictionary用法总结
- listview 和 listwiget 有什么区别联系
- 通过软件架构来达到易用性-软件策略
- 二分查找单调队列
- HDU 4632 Palindrome subsequence 解题报告
- c++设计模式—代理模式
- Lena与图像处理
- Effective Java 第13条 : 使类和成员的可访问性最小化
- scrapy 入门教程
- Java软件架构师必须具备的东西
- 定位API地址学习
- 再来一个复习一下,ELFhash算法和hash table
- cas原理介绍
- CSemaphore/CMutex/CCriticalSection/CEvent之间区别