意图:为其他对象提供一种代理以控制对这个对象的访问。
主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
实现
我们将创建一个 Image 接口和实现了 Image 接口的实体类。ProxyImage 是一个代理类,减少 RealImage 对象加载的内存占用。
ProxyPatternDemo,我们的演示类使用 ProxyImage 来获取要加载的 Image 对象,并按照需求进行显示。


方框为原有,圆边框为新增对象or关系。
可见,代理本身是通过持有原始对象,然后调用原始对象方法实现相关功能的,也就是说其实代理模式本身并没有改变任何逻辑流程,也没做太多流程等的抽象化,仅仅是转发了操作。实际使用中代理是解决权限or资源类问题,这一点也可以和适配器进行区分,适配器中的那个新增对象就可以看做代理(当然,他还实现了额外接口)。

代码样例:

public class ProxyImage implements Image{private RealImage realImage;private String fileName;public ProxyImage(String fileName){this.fileName = fileName;}@Overridepublic void display() {if(realImage == null){realImage = new RealImage(fileName);}realImage.display();}
}

设计模式09_代理模式相关推荐

  1. 【设计模式】代理模式 ( 动态代理 | 模拟 Java 虚拟机生成对应的 代理对象 类 )

    文章目录 前言 一.模拟 JVM 生成对应的 代理对象 二.模拟 JVM 生成对应的 代理对象 完整流程展示 1.目标对象接口 2.被代理对象 3.调用处理程序 4.模拟 JVM 生成的代理对象类 5 ...

  2. C++设计模式之代理模式

    这篇文章主要介绍了C++设计模式之代理模式,本文讲解了什么是代理模式.代理模式的使用场合.代理模式的实现代码等内容,需要的朋友可以参考下 前言 青春总是那样,逝去了才开始回味:大学生活也是在不经意间就 ...

  3. python中代理模式分为几种_Python设计模式之代理模式实例详解

    本文实例讲述了Python设计模式之代理模式.分享给大家供大家参考,具体如下: 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 #!/usr/bin/env py ...

  4. 设计模式笔记——代理模式

    设计模式笔记--代理模式 代理模式介绍 代理模式通常是介于请求方和提供方的一个中介系统,请求方是发送请求的一方,提供方是根据请求提供相应资源的一方 Web中的代理服务器就是一个例子,客户端向代理服务器 ...

  5. 「设计模式(五) - 代理模式」

    「设计模式(五) - 代理模式」 一.处处可见的"代理" "代理"在平常生活司空见惯,点外卖,租房子找中介,买飞机票等等.基本上用手机就能完成,也就是不直接接触 ...

  6. Javascript 设计模式之代理模式【讲师辅导】-曾亮-专题视频课程

    Javascript 设计模式之代理模式[讲师辅导]-969人已学习 课程介绍         随着 javascript ES6/7 的发布,很多老版本的设计模式的实现,今天来看是错误的,将被彻底. ...

  7. 设计模式之一代理模式

    代理模式(代理设计模式) 代理模式的定义与特点 代理模式的结构与实现 代理模式(代理设计模式) 在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代 ...

  8. 23种设计模式7_代理模式之一静态代理

    23种设计模式7_代理模式之一静态代理 1 基本介绍 代理模式:为其他对象提供一种代理以控制对这个对象的访问 代理模式也叫委托模式,它是一项基本设计技巧.许多其他的模式,如状态模式.策略模式.访问者模 ...

  9. Java中的设计模式:“代理模式”的理解

    代理模式定义: 为其他对象提供一种代理以控制对这个对象的访问.在面向对象中,有时候直接访问一些对象比较麻烦,所以代理模式就是在这个对象上加上一个访问该对象的访问层.类似于很多明星的事务实际都是交给经纪 ...

最新文章

  1. asic面试题目 英伟达_英伟达一面总结
  2. JavaWeb第一讲 Servlet的工作原理及生命周期
  3. c++ list 修改_ggplot2 修改图例的一些操作
  4. mongodb 备份mysql_MongoDB备份与恢复
  5. JUnit简单使用教程
  6. 设计师的10种范式转变
  7. scp免密码远程拷贝
  8. 那个学Python 的同龄人,也许已经超越你了!
  9. 手把手教你如何下载大厂页面的字体——开发
  10. python不带颜色的图形_python – 为什么seaborn pairplot中的kde子图中没有显示颜色?...
  11. 申请https协议总结
  12. Docker入门与应用系列(二)镜像管理
  13. Yandex插件使用说明——Slager_Z
  14. Exploring Sparsity in Image Super-Resolution for Efficient Inference
  15. html+css+javascript+jquery+bootstarp响应式旅行社旅游平台网站模板(14页)
  16. 学校机房计算机类型,学校计算机机房的管理和维护建议原稿(备份存档)
  17. 你真的会开会吗?开会无用说
  18. Facebook登录的时候验证邮箱
  19. websocket实现聊天室(一)
  20. 如何进入docker系统

热门文章

  1. pickle使用实例
  2. Java static , final和常量设计
  3. SQL Server中的即时文件初始化概述
  4. SpringBoot------全局异常捕获
  5. 彻底搞懂Gradle、Gradle Wrapper与Android Plugin for Gradle的区别和联系
  6. WebPack常用功能介绍
  7. 第三回 Bootstrap3.x 起步
  8. 未从创建控件的线程访问解决办法
  9. [导入]vs2005视频教程 之 编译程序集和发布网站 [视频]
  10. 在NT系列操作系统里让自己“消失”