Java中“装饰模式”和“代理模式”有啥区别

小编 2003

Java中“装饰模式”和“代理模式”有以下区别:1.生效对象不同;2.作用不同;3.目标不同;4.侧重点不同。生效对象不同是指,装饰器模式生效的对象还是原本的对象,而代理模式生效的是新的对象(代理对象)。

1.生效对象不同

“装饰模式”是在不改变对象自身的基础上,在程序运行期间给对象动态的添加职责;而“代理模式”是为其他对象提供一种代理以控制对这个对象的访问。区别在于,装饰器模式生效的对象还是原本的对象,而代理模式生效的是新的对象(代理对象)。

2.作用不同

“装饰模式”是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案;而“代理模式”是给一个对象提供一个代理对象,并用代理对象来控制对原有对象的引用。

3.目标不同

“装饰模式”的目标仍然可以自行对外提供服务,装饰器只起增强和辅助作用;而“代理模式”是全权代理,目标根本不对外,全部由代理类来完成。

4.侧重点不同

“装饰模式”强调的是增强、新增行为;而“代理模式”强调的是对代理的对象施加控制,但不对对象本身的功能进行增强。

5.调用方式不同

一般“装饰模式”是通过构造器层层嵌套的形式,而“代理模式”隐藏被代理对象的内部细节。

延伸阅读

Java中代理模式分为哪几种

Java中代理模式主要分为五种,即远程代理(remote proxy)、虚拟代理(virtual proxy)、保护代理(protection proxy)、缓存代理(cache proxy)和智能引用(smart reference)。

1.远程代理

远程代理适用于提供服务的对象处在远程的机器上,通过普通的函数调用无法使用服务,需要经过远程代理来完成。因为并不能直接访问本体对象,所有远程代理对象通常不会直接持有本体对象的引用,而是持有远端机器的地址,通过网络协议去访问本体对象。

2.虚拟代理

在程序设计中常常会有一些重量级的服务对象,如果一直持有该对象实例会非常消耗系统资源,这时可以通过虚拟代理来对该对象进行延迟初始化。

3.保护代理

保护代理用于控制对本体对象的访问,常用于需要给Client的访问加上权限验证的场景。

4.缓存代理

缓存代理主要在Client与本体对象之间加上一层缓存,用于加速本体对象的访问,常见于连接数据库的场景。

5.智能引用

智能引用为本体对象的访问提供了额外的动作,常见的实现为C++中的智能指针,为对象的访问提供了计数功能,当访问对象的计数为0时销毁该对象。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部