七个结构模式之代理模式(Proxy Pattern)
定义:
给某一个对象提供一个代理或者占位符,并由代理类来控制对原对象的访问。代理对象在客户端和实际对象之间启到了中介作用,并且强调了代理类对原对象的控制作用。例如:安全代理、缓冲代理、远程代理等。
结构图:

- Subject:抽象主题类,定义了真实主题和代理类的共同接口,客户端根据该抽象接口进行编程,对代理类的内部实现不需要关心。
- RealSubject:真实主题类,实现了真正的业务操作,但因为一些原因不能或不允许客户端直接访问。
- Proxy:代理主题类,包含了对真实主题的引用,当调用真实主题的操作时,需要加上特定的预处理或者其它附加操作,以约束或限制真实主题的业务操作,达到控制和优化的作用。
代理模式和装饰者模式的区别
代理模式和装饰者模式的结构图十分相似,但两者的侧重点不一样。
- 装饰者模式又被称作“Smart Proxy”,其主要功能是动态添加功能,不关心具体被添加功能者是谁。
- 代理模式的主要功能是对被代理类进行控制和约束,不能动态地添加功能,这些功能一般都是限定好的。
常见代理模式
- 远程代理:使得客户端可以访问远程主机上的对象,远程主机上的对象可能有更良好的性能和处理速度,并且可以向客户隐藏网络细节,有代理对象来处理网络连接和通信工作。
- 虚拟代理:对于一些加载时间比较长或者占用系统资源比较多的对象,可以创建虚拟对象来先行处理与客户端的交互,再有虚拟代理转发对应的请求给真实的对象。
- 缓冲代理:对于一些操作频繁,而且每次操作消耗比较大的对象可以代用缓冲代理的方式,建立临时的缓冲空间,统一进行批量处理。
优点:
- 对实际访问的对象进行控制,并添加了额外功能,并向客户隐藏了实现细节。
- 符合开闭原则,通过不用的代理器可以实现不同的功能,提高系统的可扩展性。
- 不同的代理方式有着不同的优秀特性。
七个结构模式之代理模式(Proxy Pattern)的更多相关文章
- Java进阶篇设计模式之七 ----- 享元模式和代理模式
前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...
- Java设计模式之七 ----- 享元模式和代理模式
前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...
- axios 两种异步模式,代理模式 和 异步模式
axios 两种异步模式,代理模式 和 异步模式
- [转载]Java中继承、装饰者模式和代理模式的区别
[转载]Java中继承.装饰者模式和代理模式的区别 这是我在学Java Web时穿插学习Java设计模式的笔记 我就不转载原文了,直接指路好了: 装饰者模式和继承的区别: https://blog.c ...
- 设计模式---接口隔离模式之代理模式(Proxy)
一:概念 代理模式(Proxy Pattern)就是为其他对象提供一种代理以控制对这个对象的访问. 比如: 智能指针 为别人做嫁衣 所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端 ...
- 设计模式12---设计模式之代理模式(Proxy)(结构型)
1.场景模拟 考虑这样一个实际应用: HR提出,当选择一个部门或者是分公司的时候,要把所有的分公司下的员工显示出来,而且不要翻页,方便进行业务处理,只需要显示姓名即可,但是点击姓名会出现这位员工的详细 ...
- 设计模式GOF23(结构型模式:代理模式,适配模式,桥接模式,组合模式,装饰模式,外观模式,享元模式)
结构型模式: – 分类: • 适配器模式.代理模式.桥接模式.装饰模式.组合模式.外观模式.享元模式 – 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题. 结构 ...
- Java代理模式——静态代理模式
一:代理模式 代理模式的作用是:为其他对象提供一种代理以控制这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 二:代理模式设计 ...
- Java模式—静态代理模式
静态代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问,提供“真实对象”的代表,在访问对象时引入一定程度的间接性,这种间接性可以附加多种用途. 代理模式的主要作用是为其他对象 ...
随机推荐
- 重构Mybatis与Spring集成的SqlSessionFactoryBean(1)
一般来说,修改框架的源代码是极其有风险的,除非万不得已,否则不要去修改.但是今天却小心翼翼的重构了Mybatis官方提供的与Spring集成的SqlSessionFactoryBean类,一来是抱着试 ...
- ScheduleThreadPoolExecutor的工作原理与使用示例
欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. ScheduleExecutorService接口.ScheduledFuture ...
- Topology Shapes of OpenCascade BRep
Topology Shapes of OpenCascade BRep eryar@163.com 摘要Abstract:通过对OpenCascade中的BRep数据的读写,理解边界表示法的概念及实现 ...
- JAVA--网络编程(UDP)
上午给大家简单介绍了一下TCP网络通信的知识,现在就为大家补充完整网络编程的知识,关于UDP的通信知识. UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP协议可 ...
- 数据可视化(1)--Chart.js
Chart.js是一个HTML5图表库,使用canvas元素来展示各式各样的客户端图表,支持折线图.柱形图.雷达图.饼图.环形图等.在每种图表中,还包含了大量的自定义选项,包括动画展示形式. Char ...
- HTML5移动Web开发(九)——优化浏览器视口宽度设置
每个移动设备都有自己默认的视口宽度,如果你不显示的设置它的值,在渲染页面的时候你可能会得不到你想要的效果.比如,如果不设置iPhone的视口宽度,它将会按照980像素的宽度渲染页面,如果你的页面设计不 ...
- Linux - History
history命令 打印所有命令记录:history 打印最近10条记录:history 10 执行第123条命令记录:!123 重复执行上一条命令:!! 执行最后一次以ls开头的命令:!ls 逐屏列 ...
- nodejs操作mongodb
一.下载地址 https://www.mongodb.com/download-center#community 二.控制台操作mongodb 1.安装完后添加环境变量. 2.在某个根目录下新建dat ...
- js基础-表单验证和提交
基础知识: 原始提交如下: <form action="/login" method="post" id="form1"> &l ...
- SQL Server代理(6/12):作业里的工作流——深入作业步骤
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这里系列的前几篇文章所见,SQL ...