一、代理模式

为其他对象提供一种代理以控制对这个对象的访问。

代理模式分为四种:

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

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

安全代理:用来控制真实对象访问时的权限。

智能指引:当调用目标对象时,代理可以处理其他的一些操作。(智能指针)

二、UML图

三、例子

(1)虚代理

考虑一个可以在文档中嵌入图形对象的文档编辑器。有些图形对象的创建开销很大。但是打开文档必须很迅速,因此我们在打开文档时应避免一次性创建所有开销很大的对象。这里就可以运用代理模式,在打开文档时,并不打开图形对象,而是打开图形对象的代理以替代真实的图形。待到真正需要打开图形时,仍由代理负责打开。

class Image
{
public:Image(string name): m_imageName(name) {}virtual ~Image() {}virtual void Show() {}
protected:string m_imageName;
};
class BigImage: public Image
{
public:BigImage(string name):Image(name) {}~BigImage() {}void Show() { cout<<"Show big image : "<<m_imageName<<endl; }
};
class BigImageProxy: public Image
{
private:BigImage *m_bigImage;
public:BigImageProxy(string name):Image(name),m_bigImage(0) {}~BigImageProxy() { delete m_bigImage; }void Show() {if(m_bigImage == NULL)m_bigImage = new BigImage(m_imageName);m_bigImage->Show();}
};int main()
{Image *image = new BigImageProxy("proxy.jpg"); //代理image->Show(); //需要时由代理负责打开delete image;return 0;
}

转载于:https://www.cnblogs.com/justkong/p/6236118.html

设计模式--代理模式Proxy(结构型)相关推荐

  1. 设计模式-代理模式(Proxy Pattern)

    设计模式-代理模式(Proxy Pattern) 文章目录 设计模式-代理模式(Proxy Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.小结 六.动态代理 ...

  2. 设计模式——代理模式(Proxy Pattern)之为别人做嫁衣

    代理模式Proxy Pattern 代理模式 1.背景 2.定义 3.特征 4.应用场景 5.实验案例 参考 代理模式 1.背景 假如说我现在想租一间房子,虽然我可以自己去找房源,做卫生检测等一系列的 ...

  3. js设计模式——代理模式proxy

    什么是代理模式 代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问. (可以想象一下明星与经纪人的关系,明星是请求的本体,经纪人就是代理proxy) 如何实现代理模式 代理对象内部含有对本 ...

  4. 【设计模式】—-(12)代理模式(结构型)

    这篇文章挺有意思的,是男人应该都能理解吧.(捂嘴:)) 代理模式理解应该很简单,就是现实中的中介,相信大家都租过房子,撸主上学那会其实就很鄙视中介,看其他同学都找中介很快搞定房子,而露珠呢,宁可自己去 ...

  5. C++设计模式--代理模式(Proxy)

    前言 C++相对其他编程语言来说算是比较难的了,相关知识点非常多,并且有些概念理解起来比较困难,对于初学者来说可能会感觉到非常痛苦.随着项目难度的升级,需要不断地优化框架从而使整个结构更具有扩展性,那 ...

  6. 趣谈设计模式 | 代理模式(Proxy):利用代理来控制对象的访问

    文章目录 案例:房屋中介 代理模式 代理模式与装饰器模式 代理模式的应用 远程代理 虚拟代理 安全代理 智能引用代理 写时拷贝代理 总结 完整代码与文档 由于代理模式相较于前面的其他设计模式来说更加简 ...

  7. 人人都会设计模式---代理模式--Proxy

    教程大纲 版权声明:本文为博主原创文章,未经博主允许不得转载 PS:转载请注明出处 作者: TigerChain 地址: www.jianshu.com/p/1b3b6b003- 本文出自 Tiger ...

  8. Proxy 代理模式 对象结构型模式

    1.意图 为其它对象提供一种代理以控制对这个对象的访问. 2.别名 Surrogate 3.动机 对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化.我们考虑一个 ...

  9. 七大设计原则与设计模式(创建型模式、结构型模式、行为型模式)

    七大设计原则 开闭原则.依赖倒置原则.单一职责原则.接口隔离原则.迪米特法则(最少知道原则).里氏替换原则.合成 (组合).聚合复用原则 开闭原则 定义: 一个软件实体如类.模块和函数应该对扩展开放, ...

  10. 重拾设计模式-代理模式

    简介: 代理模式属于结构型模式,功能是为其他对象提供一种代理以便于控制对这个对象的访问.常见实现方式有静态代理.动态代理.Spring中的AOP就是基于代理模式实现的. 具体实现及测试如下: 1. 静 ...

最新文章

  1. 【译】Android系统简介—— Activity
  2. 记一个UltraEdit15.10注册码
  3. javascript的函数定义的区别
  4. Java 动态代理及 RPC 框架介绍
  5. 第十天学习Java的笔记(数组)
  6. MySQL排序优化(两次排序和单次排序)
  7. SpringBoot整合Redis要注意的那些
  8. 乐视股票21日起停牌,集成播控平台变“黑屏”
  9. 一次debug过程描述
  10. Eclipse Plugin for Hadoop2.2.0
  11. 【读书笔记《Android游戏编程之从零开始》】12.游戏开发基础(Canvas 画布)
  12. Shiro - RememberMe记住我功能实现
  13. android应用程序开发宝典,android应用程序开发宝典.pdf
  14. 预充电电路工作原理_电动汽车电控系统预充电原理
  15. c语言解线性方程组矩阵形势,c语言解线性方程组.docx
  16. 中国裁判文书网接口解密
  17. JSON和全局异常处理
  18. linux根文件系统与内核合二为一
  19. 阅读《Keyword-Guided Neural Conversational Model》
  20. HTTPS之SNI介绍与Nginx多域名支持

热门文章

  1. Mac 不能进入睡眠模式,如何修复?
  2. MAMP Pro for Mac(PHP/MySQL开发环境)
  3. SSH终端仿真器:ZOC 8 for Mac
  4. Parallels Desktop 17 for Mac(pd虚拟机)支持Intel 和 Apple M1
  5. linux命令大全之ss命令详解(获取socket统计信息)
  6. laravel路由基本知识
  7. applet demo
  8. 一个c++程序员对大学生的友情提醒
  9. 思科GNS3和华为eNSP完美结合
  10. 诡异的ie8堆栈溢出异常