代理模式详见《Java-动态代理》
装饰模式详见《装饰者模式》

代理模式

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

代理类与委托类之间通常会存在关联关系,我们在访问实际对象时,是通过代理对象来访问的。代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。代理类提供附加功能。

代理模式中最终都是通过代理类对象来访问,被代理的类对外是隐藏的,只能看到代理类。

装饰模式

装饰模式:动态地给一个对象增加一些额外的职责。就扩张功能而言,装饰模式提供了一种比使用子类更加灵活的替代方案。

  • Component(抽象构建类):它是具体构件类和抽象装饰类的父类。声明规范具体构建类的业务方法。
  • ConcreteComponent(具体构件类):它是抽象构建类的子类,实现了抽象构建类业务方法,具体装饰类会给它增加额外的功能。
  • Decorator(抽象装饰类):它也是抽象构建类的子类,继承或实现抽象构件。它维护一个指向抽象构建对象的引用通过该引用可以调用装饰之前构建对象的方法并通过其子类扩展该方法,已达到装饰的目的
  • ConcreteDecorator(具体装饰类):它是抽象装饰类的子类,实现抽象装饰类的相关方法,负责具体构件类添加新的功能。每一个具体的装饰类都定义了一个具体的行为。

装饰模式是通过自己传入需要被装饰的对象,然后再使用装饰过后的对象的增强方法。

区别

两者都是对类的方法进行增强,但装饰器模式强调的是增强自身,在被装饰之后你能够够在被增强的类上使用增强后的方法。增强过后还是你,只不过能力变强了。

而代理模式则强调要别人帮你去做一些本身与你业务没有太多关系的职责。代理模式是为了实现对象的控制,因为被代理的对象往往难以直接获得或者是其内部不想暴露出来。

装饰类的代码编写和代理很类似,具体区别如下:

  1. 代理是全权代理,被代理类根本不对外,全部由代理类来完成,通过代理对象来访问
  2. 装饰是增强,是辅助,被代理类仍然可以自行对外提供服务,装饰器只起增强作用。
  3. 代理的目标也可以是类,装饰目标必须是接口。
  4. 代理模式应用有Spring AOP和Spring 事务等;装饰模式应用IO类,Spring过滤器也会用到装饰模式,可以链式调用。

总之,一句话,代理模式只能通过代理类访问,装饰模式被装饰都可以被访问,只是功能被增强。

代理模式和装饰模式的区别相关推荐

  1. 设计模式 代理模式和装饰模式的区别

    网上各种类图,UML学的不好看着实在累.所以,理论学的不进去了,咱们抛开ta聊下区别,希望最后有助于理解理论. 代理模式: 代如其名,生活中办事如果遇到代理或者中介,中间被坑了多少,用户是肯定不清楚的 ...

  2. 策略模式、观察者模式、代理模式、装饰模式 应用场景和实现

    有个大神写的很好: 参考:设计模式学习笔记(四:策略模式) 参考:设计模式学习笔记(二:观察者模式) 参考:设计模式学习笔记-代理模式 参考:设计模式--装饰者模式与代理模式(重要) 参考:设计模式- ...

  3. 带你认识4种设计模式:代理模式、装饰模式、外观模式和享元模式

    摘要:本文我们主要介绍结构型模式中的代理模式.装饰模式.外观模式和享元模式. 本文分享自华为云社区<快来,这里有23种设计模式的Go语言实现(三)>,原文作者:元闰子 . 设计模式(Des ...

  4. 设计模式——代理模式与装饰模式的异同

    两种模式的特点 装饰模式: 在不改变接口的前提下,动态扩展对象的访问. 动态继承,让类具有在运行期改变行为的能力. 装饰模式,突出的是运行期增加行为,这和继承是不同的,继承是在编译期增加行为. 强调: ...

  5. 外观模式和代理模式的联系和区别_设计模式之代理模式

    代理模式 Proxy Intro 代理模式,给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间 ...

  6. 外观模式和代理模式的联系和区别_设计模式之代理设计模式

    原文首发于微信公众号:jzman-blog,欢迎关注交流! 今天来看一下什么是代理设计模式,顾名思义,代理就是通过中介代替某人做某一件事,对应到我们的程序中就是通过代理对象来控制某个具体对象某个方法的 ...

  7. 外观模式和代理模式的联系和区别_java23种设计模式-结构型模式之外观模式

    外观模式(Facade) 外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合 ...

  8. JAVA设计模式--代理模式(静态)

    目录 一.什么是代理模式 二.静态代理模式的结构 三.静态代理模式应用举例 应用一 应用二 四.代理模式的应用场景 五.静态代理模式的特点 一.什么是代理模式 代理(Proxy)模式为其他对象提供一种 ...

  9. 设计模式完结(12)-- 代理模式

    代理模式与装饰模式区别: 装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问.换句话说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息. ...

  10. 代理模式——结构型模式(7)

    前言 今天我们将介绍的最后一种结构型模式--代理模式,在介绍它之前,让我们先回顾下上一篇博文对享元模式的学习.享元模式主要是通过运用共享技术有效支持大量细粒度的对象,其本质在于两方面:分离和共享.简单 ...

最新文章

  1. 深度学习框架PyTorch快速开发与实战
  2. 机器学习的数学基础(1)--Dirichlet分布
  3. 天猫整站SSM-后台分类管理-增加(做个人学习笔记整理用)
  4. vba校对统计不同工作薄(2)
  5. hdu 3038 HowManyAnswersAreWrong 并查集
  6. 【Unity3D插件】Highlighting System插件分享《物体高亮插件》
  7. 打印机提示更换墨盒,但打印字仍很清晰,打印机设置还能用很久
  8. js统计页面刷新次数
  9. 提示fxp不是一个目标文件
  10. wr885n虚拟服务器设置,TP-Link TL-WR885N V4路由器上网设置方法
  11. js:为窗口盒子添加拖拽事件
  12. linux关机suspending,(转)Linux 休眠原理与实现
  13. 每天一练——输入一行字符串,按如下规则加密:如果是英文字母则大写变小写、小写变大写,对非英文字符则保持不变。试写加密程序。
  14. 现代交换技术学习笔记
  15. PYTHON库,让你相见恨晚的第三方库
  16. java ftp上传文件内容为空
  17. 10.13(129. 求根到叶子节点数字之和 130. 被围绕的区域)
  18. 知识碎片 || 计算机性能指标之【CPU主频”】
  19. 地图不是领地尼克·格里尔的采访
  20. 蓝色天空HTML网页模板

热门文章

  1. excel求方差和标准差的函数_Excel公式和函数 方差和标准差
  2. Elasticsearch bank account测试数据
  3. M1芯片的Mac在开发iOS项目时遇到的问题汇总(模拟器无法运行,Cocoapods错误等)
  4. python bt_linux平台使用Python制作BT种子并获取BT种子信息的方法
  5. png在线转换icns
  6. Stephen R.Covey《高效人士的7个习惯》
  7. 石墨烯的精细结构研究取得进展
  8. 华为S6720系列万兆交换机光模块解决方案
  9. 利用逆矩阵解线性方程组_经典Jacobi方法用于求解矩阵特征值
  10. react hook的setState后,不会重新render页面