proxy(代理)——对象结构型模式

1.意图
为其他对象提供一种代理以控制这个对象的访问

2.动机
对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化。

3.适用性
在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用proxy模式
1)远程代理
为一个对象在不同的地址空间提供局部代表
2)虚代理
根据需要创建开销很大的对象
3)保护代理
控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的时候。
4)智能指引
取代了简单指针,在访问对象的时候执行一些附加的操作

4.结构

参考:http://www.cnblogs.com/rush/archive/2011/06/19/2084775.html

5.参与者
proxy
保存一个引用使得代理可以访问实体
提供一个subject的接口相同的接口,这样代理可以用来替代实体
控制对实体的存取,并可能负责创建和删除他
其他功能依赖于代理的类型:
    远程代理负责对请求及其参数编码,并向不同地址空间中的实体发送已编码的请求
    虚代理可以缓存实体的附加信息,一边延迟对它的访问
    保护代理可以检查调用者是否具有实现一个请求所必须的访问权限。
subject
定义realSubject和Proxy的公用接口,这样就可以在任何使用realSubject的地方使用proxy
realSubject
定义proxy所代表的实体

6.协作
flyweight执行时所需的状态必定是内部的或者是外部的,内部状态存储于concreteflyweight对象之中,而外部对象则由client对象存储,当用户调用flyweight对象的操作时,将该状态传递给他。
用户不应该直接对concreteflyweight类进行实例化,二十只能从flyweightFactory对象得到concreteflyweight对象,这保证对他们适当的进行共享。

7.效果
在访问对象的时候引入了一定的间接性,根据代理类型不同而不同
    远程代理可以隐藏一个对象存在于不同地址空间的事实
    虚代理可以进行最优化
    保护代理可以允许访问一个对象时有一些附加的内务处理

8.实现
重载c++中的存取运算符
重载->使你可以在撤销对一个对象的引用时,执行一些附加的操作。这一点可以实现某些种类的代理,代理的作用就像指针。

9.代码示例

#include<iostream>
using namespace std;class subject
{public:virtual void dosth(){}
};class realSubject:public subject
{public:realSubject(string str){name = str;}void dosth(){for(int i=0;i<10;i++){cout<<"waiting "<<i<<" seconds....."<<endl;    }cout<<getName()<<endl;}string getName(){return name;}private:string name;
};class proxy:public subject
{public:proxy(realSubject *r){rsub = r;}void dosth(){cout<<rsub->getName()<<endl;}private:realSubject *rsub;
};int main()
{realSubject *r = new realSubject("a subject farrrrrrr away");cout<<"without proxy"<<endl;r->dosth();cout<<endl<<"with proxy"<<endl;proxy *p = new proxy(r);p->dosth();
}

10.相关模式
adapter:为他所适配的对象提供了一个不同的接口,相反,代理提供了和实体相同的接口。实际上应该只是实体接口的一个子集,因为有些操作会被拒绝。
decorator:为了增加一些功能,而代理是为了控制对象的访问。

转载于:https://www.cnblogs.com/w0w0/archive/2012/05/20/2510193.html

设计模式十三:proxy(代理)——对象结构型模式相关推荐

  1. Proxy(代理)--对象结构型模式

    Proxy(代理)–对象结构型模式 一.意图 为其他对象提供一种代理以控制对这个对象的访问. 二.动机 1.在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或 ...

  2. 设计模式七:Adapter(适配器)——类对象结构型模式

    结构型模式: 结构型模式设计到如何组织类和对象以获得更大的结构. 结构型类模式: 采用继承机制来组合接口或实现.简单的例子是采用多重继承,这一模式尤其有助于多个独立开发的类库协同工作. 结构型对象模式 ...

  3. .NET设计模式(15):结构型模式专题总结

    .NET设计模式(15):结构型模式专题总结 --探索设计模式系列之十五 Terrylee,2006年5月 摘要:结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模 ...

  4. Adapter(适配器)--类对象结构型模式

    Adapter(适配器)–类对象结构型模式 一.意图 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本接口不兼容而不能一起工作的那些类可以一起工作. 二.动机 1.在软件系统中, ...

  5. 详解23种设计模式(基于Java)—— 结构型模式(三 / 五)

    目录 3.结构型模式(7种) 3.1.代理模式 3.1.1.概述 3.1.2.结构 3.1.3.静态代理 3.1.4.JDK动态代理 3.1.5.CGLIB动态代理 3.1.6.三种代理的对比 3.1 ...

  6. 23种设计模式(第三章结构型模式7种)

    结构型模式 结构型模式描述如何将类或对象按某种布局组成更大的结构.它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象. 由于组合关系或聚合关系比继承关系耦 ...

  7. 设计模式初识(三)结构型模式(Structural Pattern)

    为什么要使用结构型模式 结构型模式关注点在于"如何组合对象/类",更关注类之间的组合关系: 类结构型模式关心类的组合,由多个类可以组合成一个更大的(继承): 对象结构型模式关心类与 ...

  8. Flyweight(享元)--对象结构型模式

    Flyweight(享元)–对象结构型模式 一.意图 运行共享技术有效地支持大量细粒度的对象. 二.动机 1.在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行 ...

  9. Facade(外观)--对象结构型模式

    Facade(外观)–对象结构型模式 一.意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 二.动机 1.上述左边方案的问题在于组 ...

最新文章

  1. 在linux下安装VITIS-AI人工智能开发环境配置
  2. linux 删除小于、大于固定大小的文件
  3. python-pygame激动时刻你我共享
  4. JavaFX技巧5:可观察
  5. SpringCloud 入门教程(一): 服务注册
  6. Linux开机启动过程(11):start_kernel 初始化(至setup_arch解析cmdline前)
  7. java io字符流_Java IO流字符流简介及基本使用
  8. ad 单点登录 java 访问权限_如何配置Portal 基于AD的单点登录配置
  9. 6 VPP源码分析 (VPP中的多线程)
  10. 一只青蛙一次可以_“七夕青蛙”被玩坏了,哈哈哈哈哈哈哈哈哈哈太好玩了
  11. 2017北理复试机试题
  12. Java毕业设计_班级网站
  13. Docker容器化技术教程,24小时快速入门
  14. 动态规划之0-1背包问题(思路详解+表格演示过程+最优解打印方法+详细代码)
  15. 2048小游戏(原生js基础代码篇)
  16. vue前端生成词云图的方法
  17. c语言转fpga原理,要想玩转FPGA,就必须理解FPGA内部的工作原理-可编程逻辑-与非网...
  18. 1800元龙芯笔记本试用报告 仅是PIII水平?
  19. Tet3在前脑神经元中对抗焦虑
  20. html加载背景图片

热门文章

  1. android xml 指纹动画,如何检查设备是否具有指纹功能并在Android中使用
  2. Android应用签名作用,安卓app签名功能
  3. 如何黑掉一台根本不联网的电脑
  4. Java程序转成exe可执行程序方法和exe4_j下载地址和破解。
  5. android 请求参数打印,android retrofit 请求参数格式RequestBody的方法
  6. python嵌入html_Python odoo中嵌入html简单的分页功能
  7. python划分数据集_Python数据集切分实例
  8. oppo手机工程模式清除数据需要密码_「MIUI玩机技巧27」如何快速查询和清除电池信息...
  9. Rich featurehierarchies for accurate object detection and semantic segmentation
  10. 【通知】有三AI带学习资料的固态硬盘最后5个