Proxy(代理)-对象结构型模式
1.意图
为其它对象提供一种代理以控制对这个对象的访问。
2.别名
Surrogate.
3.动机
通过Proxy可以达到对一个对象的访问控制。
4.适用性
- 远程代理 为一个对象在不同地址空间提供局部代表。
- 虚代理 根据需要创建开销很大的对象。
- 保护代理 控制对原始对象的访问。
- 智能指引 取代了指针,它在访问对象时执行一些附加操作。
5.结构

6.代码实例
//Subject.h #include <memory> class Subject
{
public:
virtual void Request() = ;
}; class RealSubject : public Subject
{
public:
void Request();
}; class Proxy : public Subject
{
public:
Proxy();
void Request();
private:
std::shared_ptr<Subject> m_pSubject;
};
//Subject.cpp #include <iostream>
#include "Subject.h" void RealSubject::Request()
{
std::cout<<"RealSubject Request Exectued" << std::endl;
} Proxy::Proxy()
{
m_pSubject = std::shared_ptr<Subject>(new RealSubject);
} void Proxy::Request()
{
m_pSubject->Request();
}
//Client.cpp #include "Subject.h" int main()
{
std::shared_ptr<Subject> pProxy(new Proxy);
pProxy->Request(); while();
}
7.测试结果

8.效果
- 远程代理 可以隐藏一个对象存在于不同地址空间的事实。
- 虚代理 可以进行最优化,例如根据要求创建对象。
- 保护代理和智能引用 都允许在访问一个对象时有一些附加的内务处理。
Proxy(代理)-对象结构型模式的更多相关文章
- 组合模式/composite模式/对象结构型模式
组合模式/composite模式/对象结构型 意图 将对象组合成树形结构以表示"整体--部分"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 动机 C ...
- Bridge模式——对象结构型模式
今天看了Bridge模式,对其进行简单的总结,并给出几篇通俗易懂的文章链接. (一)意图--将抽象部分和它的实现部分分离,使它们都可以独立地变化. 适用于从多维度描述的类型,拆解开来,使其能沿着各维度 ...
- Facade(外观)-对象结构型模式
1.意图 为子系统中的一组接口提供一个一致的接口,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 2.动机 将一个系统划分成若干子系统有利于降低系统的复杂性.一个常见的设计目 ...
- Decorator(装饰)-对象结构型模式
1.意图 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 2.别名 包装器 Wrapper. 3.动机 给某个对象而不是整个类添加一些功能.一个较为灵 ...
- Bridge(桥接)-对象结构型模式
1.意图 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 2.动机 在抽象类与它的实现之间起到桥梁作用,使它们可以独立地变化. 3.适用性 不希望在抽象和它的实现部分之间有一个固定的绑定关系. ...
- Adapter(适配器)-类对象结构型模式
1.意图 将一个类接口转换成客户希望的另外一个接口.Adapter模式使那些原本不能一起工作的类,可以一起工作. 2.别名 包装器 Wrapper. 3.动机 一个应用可能会有一些类具有不同的接口,并 ...
- Flyweight(享元)--对象结构型模式
1.意图 运用共享技术有效地支持大量细粒度的对象. 2.动机 Flyweight模式描述了如何共享对象,使得可以细粒度地使用它们,而无需高昂的代价.flyweight是一个共享对象,它可以同时在多个场 ...
- Composite(组合)--对象结构型模式
1.意图 将对象组合成树形结构以表示“部分-整体”的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 2.动机 可以组合多个简单组件以形成一些较大的组件,这些组件又可以组合成 ...
- C#设计模式之十三代理模式(Proxy)【结构型】
一.引言 今天我们要讲[结构型]设计模式的第七个模式,也是"结构型"设计模式中的最后一个模式,该模式是[代理模式],英文名称是:Proxy Pattern.还是老套路,先从名字 ...
随机推荐
- 转:Java.file
类 java.io.File 的使用 使用 File 的软件包 java.awt 包含用于创建用户界面和绘制图形图像的所有类. java.io 通过数据流.序列化和文件系统提供系统输入和输出. jav ...
- Android自学笔记:Git下载源代码
Info:做J2ME几年了,现在基本没有公司用了,是时候向Android领域进军了. 自学中,难免会有疏漏,有问题请及时提出,共同学习共同进步. 2014-10-13:初版 2014-10-14:添加 ...
- 如何创建vss2005的数据库
配置如下 VSS手工创建数据库的步骤(设数据库根目录为D:\VSS): 1.在根目录中创建名为srcsafe.ini(全局配置文件)的文件,文件内容如下: Data_Path = data Temp_ ...
- python3+ 模块学习 之 re
re 模块 参考:Python3 如何优雅地使用正则表达式(详解系列) Python3 正则表达式特殊符号及用法(详细列表) (出处: 鱼C论坛) 正则表达式 常用元字符:. ^ $ * + ? ...
- AX7: HOW TO USE CLASS EXTENSION METHODS
AX7: HOW TO USE CLASS EXTENSION METHODS To create new methods on a standard AX class without custo ...
- python3网络爬虫笔记
参考资料 Python官方文档 知乎相关资料(1) 这篇非常好, 通俗易懂的总览整个Python学习框架. 知乎相关资料(2) 代码实现(一): 用Python抓取指定页面 #!/usr/bin/en ...
- Devexpress TileNavPane 控件的使用
TileNavPane提供分层水平菜单(最多三层),适用于窗体菜单内容不多或只有几个功能较常用时,风格专业简洁: 将TileNavPane拖到窗体上后,点击右上角的任务箭头,选“Add Button” ...
- 基于mini2440的Qt移植
花了很长时间,终于把Qt移植到mini2440开发板上了,不能说完全成功,总算是完成一大步,各中过程心酸,废话不多说,下面正式讲解移植过程. 移植环境: win7系统,虚拟机是ubuntu12.04 ...
- IIS7 启用GZip压缩
GZip压缩通常会达到70%以上的压缩率,如果是手机Web这无疑会使网站的访问速度大大增加,无论是CSS合并.JS合并.图片合并都不如GZip压缩来得简单直接.如果一个网页是100K,那么启用GZip ...
- arcgis_engine_c++_runtime_r6034_error
在启动项目中添加app.manifest文件 <?xml version="1.0" encoding="utf-8"?> <asmv1:as ...