在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。

介绍

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

主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。

何时使用:想在访问一个类时做一些控制。

如何解决:增加中间层。

关键代码:实现与被代理类组合。

应用实例: 1、Windows 里面的快捷方式。 2、猪八戒去找高翠兰结果是孙悟空变的,可以这样理解:把高翠兰的外貌抽象出来,高翠兰本人和孙悟空都实现了这个接口,猪八戒访问高翠兰的时候看不出来这个是孙悟空,所以说孙悟空是高翠兰代理类。 3、买火车票不一定在火车站买,也可以去代售点。 4、一张支票或银行存单是账户中资金的代理。支票在市场交易中用来代替现金,并提供对签发人账号上资金的控制。 5、spring aop。

优点: 1、职责清晰。 2、高扩展性。 3、智能化。

缺点: 1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

使用场景:按职责来划分,通常有以下使用场景: 1、远程代理。 2、虚拟代理。 3、Copy-on-Write 代理。 4、保护(Protect or Access)代理。 5、Cache代理。 6、防火墙(Firewall)代理。 7、同步化(Synchronization)代理。 8、智能引用(Smart Reference)代理。

注意事项: 1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 2、和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。

实现

我们将创建一个 Image 接口和实现了 Image 接口的实体类。ProxyImage 是一个代理类,减少 RealImage 对象加载的内存占用。

ProxyPatternDemo,我们的演示类使用 ProxyImage 来获取要加载的 Image 对象,并按照需求进行显示。

步骤 1

创建一个接口。

Image.java

步骤 2

创建实现接口的实体类。

RealImage.java

ProxyImage.java

步骤 3

当被请求时,使用 ProxyImage 来获取 RealImage 类的对象。

ProxyPatternDemo.java

步骤 4

执行程序,输出结果:

Java设计模式学习总结(14)——结构型模式之代理模式相关推荐

  1. Java设计模式笔记——七个结构型模式

    系列文章目录 第一章 Java设计模式笔记--七大设计原则 第二章 Java设计模式笔记--六个创建型模式 文章目录 系列文章目录 一.适配器模式 1.概念 2.类适配器 3.对象适配 4.缺省适配器 ...

  2. JAVA设计模式第三讲:结构型设计模式

    设计模式(design pattern)是对软件设计中普遍存在的各种问题,所提出的解决方案.本文以面试题作为切入点,介绍了设计模式的常见问题.我们需要掌握各种设计模式的原理.实现.设计意图和应用场景, ...

  3. Java设计模式(方法工厂类、单例模式、代理模式、策略模式、适配器、观察者、装饰类等)

    目录 一.简单工厂模式(Factory Method) 二.工厂方法模式 三.抽象工厂模式(Abstract Factory) 3.1 三个工厂模式区别: 四.单例模式(Singleton) 1.饿汉 ...

  4. Java设计模式(三)结构型 设计模式

    设计模式(结构型) 结构型设计模式关注如何将现有的类或对象组织在一起形成更加强大的结构.并且根据我们前面学习的合成复用原则,我们该如何尽可能地使用关联关系来代替继承关系是我们本版块需要重点学习的内容. ...

  5. C#.Net 设计模式学习笔记之结构型 (三)

    1.代理模式(Proxy Pattern) 直接与间接:    人们对复杂的软件系统常有一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活. 满足特定需求的解决方案. 动机(Motivate) ...

  6. 设计模式学习笔记(三)之静(动)态代理模式、适配器模式

    一.代理模式(Proxy): (1)静态代理模式: 简单理解: 一个人或事物代替另一个人或事物做某件事.例如:在Tom自我介绍之前,代理器自动帮他说Hello. 实现: 1 public interf ...

  7. java-设计模式(结构型)-【代理模式】

    1.代理模式(ProxyMode) 定义:外观模式是对类与类之间关系的描述,而代理模式是对原来的方法添加其他的操作. 代理有"网关"的含义,比如用户访问论坛,则要经过代理(网关)授 ...

  8. java设计模式(2) - 结构型模式

    1.适配器模式 将一个类的接口转成用户想要用的一种接口,适配器模式将一种接口兼容不能一起工作的那个类可以一起工作. 适用:1.想使用一个类,但是它的接口不符合:2.想创建一个可以复用的类,该类可以与不 ...

  9. Java设计模式之结构型:享元模式

    一.什么是享元模式: 享元模式通过共享技术有效地支持细粒度.状态变化小的对象复用,当系统中存在有多个相同的对象,那么只共享一份,不必每个都去实例化一个对象,极大地减少系统中对象的数量.比如说一个文本系 ...

  10. Java设计模式之结构型:装饰器模式

    一.什么是装饰器模式: 当需要对类的功能进行拓展时,一般可以使用继承,但如果需要拓展的功能种类很繁多,那势必会生成很多子类,增加系统的复杂性,并且使用继承实现功能拓展时,我们必须能够预见这些拓展功能, ...

最新文章

  1. hm55主板支持最大内存_内存频率取决于CPU还是主板?内存频率看主板支持还是看CPU支持?...
  2. 【POI2015】KIN/Kinoman
  3. Informatica PowerCenter使用介绍-转载
  4. Ubuntu16.04彻底删除旧内核
  5. 你好,脂肪肝!来自22岁的大学生的体检报告
  6. shell 密码输入不显示,Shell输出内容不显示密码,Shell实现有密码自动登录sshpass 应用实践...
  7. break与continue的的用法以及区别
  8. Spring Security Oauth2 (一) 整体流程介绍
  9. 判断DataTable为空,获取值,查询数据,datarow转datatable
  10. Atitit 路由器下面的网络o多个路由器配置 因为存在多个dhcp 所以,不能网有时.. 更改主要的路由路由器 88.88 这样不能ip冲突..and 外部的的dhcp 范围... 在的
  11. mysql客户端介绍
  12. 备考OCJP认证知识点总结(一)
  13. 打印机不弹出打印窗口_打印CAD图纸总是留白?做好这个操作,能打印出你想要的CAD图纸...
  14. 嵌入式软件工程师总结(1)
  15. c++ Dxgi+FFmpeg 完成对截图屏幕,以及将屏幕数据保存为MP4格式,以完成录屏功能
  16. 拜读经典——大话设计模式(一)——温习C#
  17. Excel中带字母的数字序列自增实现方法
  18. 【微信公众号开发解决URL接口配置问题 】
  19. 浅谈溯源反制与防溯源
  20. 双非渣本,5年从三流外包到阿里P6,面筋分享,给2021的移动开发一些建议

热门文章

  1. 论文公式编号右对齐_如何编辑处理论文中的公式
  2. autojs命令代码大全_各个主流品牌手机的命令代码大全,安卓工程模式的指令大全!...
  3. 超声的pacs系统和dicom服务器,PACS系统和DICOM标准.ppt
  4. mysql与win8有冲突吗_Win8系统Defender功能和安全软件冲突怎么办
  5. sql server 2005管理员手册_执行一条sql语句都经历了什么?
  6. mysql命令行操作大全_mysql命令行操作大全 mysql命令行操作总结
  7. 计算机显示器工作原理与维修,新型电脑显示器的原理与维修
  8. python期末复习卷_【期末复习卷A】六年级科学上册期末复习试题
  9. ntnub原理怎么看_电锤只转不冲击怎么回事?看懂了工作原理,你也可以动手解决...
  10. python语言发展历时_编程语言十年发展史