一、什么是代理模式

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

代理模式(Proxy)结构图

Subject类:

public abstract class Subject {public abstract void request();
}

RealSubject类:

public class RealSubject extends Subject{@Overridepublic void request() {System.out.println("真实的请求!");}}

Proxy类:

public class Proxy extends Subject{RealSubject realSubject;@Overridepublic void request() {if(realSubject==null) {realSubject = new RealSubject();}realSubject.request();}}

客户端Client类:

public class Client {public static void main(String[] args) {Proxy proxy = new Proxy();proxy.request();     }}

输出为:真实的请求!

从结果可以看出,代理(Proxy)将真实对象(RealSubject)的结果返回给了客户端(Client)。

二、代理模式应用

代理模式的使用场合:

1、远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。比如使用WebService,会在项目中生成一个WebReference的文件夹和一些文件,其实它就是代理,这就使得客户端程序调用代理就可以解决远程访问的问题。

2、虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。可以达到性能的优化,假如打开一个很大的HTML网页时,里面可能油很多的文字和图片,但是打开的速度很快,此时,看到的是所有的文字,图片确实一张一张地下载后才能看到。那些未打开的图片框,就是通过虚拟代理来替代了真实的图片,此时代理存储了真实图片的路径和尺寸。

3、安全代理,用来控制真是对象访问时的权限。一般用于对象有不同的访问权限的时候。

4、智能指引,指当调用真实对象时,代理处理另外一些事。如计算真实对象的引用次数,这样,当该对象没有引用时,可以自动释放它;或者当第一次引用一个持久对象时,将它装入内存;或者在访问一个实际对象前,检查是否已经锁定它,以确保其他对象不能改变它。它们都是通过代理模式在访问一个对象时附加一些内务处理。

代理模式其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。

(参考《大话设计模式》)

设计模式学习——代理模式(proxy)相关推荐

  1. 三国杀与设计模式之代理模式(Proxy)

    本人原博地址:http://blog.saymagic.cn/blog.php?id=17 三国杀案例:在五人局中,作为反贼的黄月英借黄忠的刀杀作为忠臣的夏侯惇,从这句话中我们可以总结出一个成语对不对 ...

  2. JS设计模式学习 - 代理模式

    代理模式(Proxy) 为一个对象提供一个代用品或占位符,以便控制对它们的访问. 代理模式是一种非常有意义的模式,在生活中可以找到很多代理模式的场景.比如,明星都有经纪人作为代理. 代理模式的关键是, ...

  3. 二十四种设计模式:代理模式(Proxy Pattern)

    代理模式(Proxy Pattern) 介绍 为其他对象提供一个代理以控制对这个对象的访问. 示例 有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这 ...

  4. 05、人人都会设计模式:代理模式--Proxy

    PS:转载请注明出处 作者: TigerChain 地址: http://www.jianshu.com/p/1b3b6b003032 本文出自 TigerChain 简书 人人都会设计模式 教程简介 ...

  5. swift设计模式学习 - 代理模式

    移动端访问不佳,请访问我的个人博客 设计模式学习的demo地址,欢迎大家学习交流 代理模式 代理模式为其他对象提供一种代理以控制对这个对象的访问,在某些情况下,一个对象不适合或者不能直接引用另一个对象 ...

  6. 设计模式之代理模式(Proxy)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  7. (@WhiteTaken)设计模式学习——代理模式

    今天学习了一下代理模式,代理模式分为很多种.目前感觉有两种是需要学习一下的. 静态代理模式 动态代理模式 1. 静态代理模式 需要被代理的类,实现一个或者多个接口. 代理类需要实现被代理类的接口,在此 ...

  8. Java设计模式之代理模式(Proxy)

    参考http://blog.csdn.net/jianghuxiaoxiami/article/details/3403924 1.代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的 ...

  9. 设计模式学习——代理模式(Proxy Pattern)

    放假啦~学生们要买车票回家了,有汽车票.火车票,等.但是,车站很远,又要考试,怎么办呢?找代理买啊,虽然要多花点钱,但是,说不定在搞活动,有折扣呢~ 1 /// 2 /// @file Selling ...

  10. 「补课」进行时:设计模式(5)——从 LOL 中学习代理模式

    1. 前文汇总 「补课」进行时:设计模式系列 2. 从 LOL 中学习代理模式 我是一个很喜欢玩游戏的人,虽然平时玩游戏的时间并不多,但我也是一个忠实的 LOL 的爱好者,就是段位有点惨不忍睹,常年倔 ...

最新文章

  1. 一文详解「群体机器人」中的「实体进化」到底是什么?
  2. Modelsim仿真查看内部信号
  3. R学习笔记之五:数据操作
  4. 流行的9个Java框架介绍: 优点、缺点等等
  5. 《spring揭秘》读书笔记三
  6. Excel XP受损文件的急救三招
  7. SAP Cloud for Customer的后台作业
  8. CentOS5、6的启动流程
  9. 內嵌html字符串顯示
  10. txt文档转excel方法
  11. android视频壁纸源码,Android 视频壁纸
  12. STEM创新教育-热量与马铃薯含水量之间的关系
  13. 面试题:o2o,b2c、b2b、c2c、p2p、b2b2c....这些内容是什么意思
  14. 域名劫持定义及原理、域名被劫持解决办法有那些
  15. echarts 柱状图数值为0时 显示柱体
  16. java 云笔记_简单的云笔记项目源码(含数据库脚本,适合新手)
  17. 熊掌号PHP,百度熊掌号广受站长关注,phpcm网站程序的熊掌号页面改造插件也火了!...
  18. [8月15日更新]南科大计算机系 “创新实践” 选题说明
  19. 解决ubuntu安装软件和下载包速度慢的问题 之pip源 apt-get源的更新
  20. 区块链架构--fabric基本介绍

热门文章

  1. @Resource详解-代码示例
  2. 利用jink的驱动软件j-flash 合并两个hex的方法,bootloader+app
  3. Unity3D Webplayer Socket网络通信经验分享
  4. 子目录和子域名哪个好?子目录和子域名如何利用seo优化?
  5. 4007: [JLOI2015]战争调度
  6. Flixel横板游戏制作教程(二)— AddingPlayer
  7. 如何用电影摄影来破解大脑
  8. MongoDB World 2016参会全记录
  9. windows开启nfs_win7专业版怎么开启nfs_win7专业版启用nfs步骤
  10. 【历史上的今天】5 月 4 日:微软放弃收购雅虎;史上最危险的电脑病毒;vi 发布