对于装饰器模式与代理模式的个人理解

简介: 摘要:代理模式与装饰器模式虽相似,但目的不同。装饰器动态增强对象功能,如添加新特性,而不改变原有类。代理模式则用于控制访问,如优化昂贵操作或添加辅助服务(如日志),它可能在内部初始化原对象。用法上,装饰器由外部决定是否应用,允许链式创建,而代理通常内部调用,外部直接与代理交互,被代理对象可能独立不可用。

对于这两个十分接近的设计模式,确实容易产生困惑,代理模式和装饰器模式看起来十分相似,都是由两个类实现相同的接口,然后一个类套另一个类。这件事足足困扰了我5分钟之久,在此总结一下它们的差别。

目的不同

装饰器模式相当于主动可选的代理模式,是对原本功能的拓展

当你想要增强你的类,给你的类增加新功能的话,你就该使用装饰器模式了。

装饰器模式能在不影响原本类的情况下,为原本类增添额外的功能。

代理模式相当于被动的装饰器模式,是对原本功能的完善

代理模式可以代理初始化极耗时间的“重量级”类,使其在进行常规操作时由代理类代劳,当必须进行初始化时,由代理类进行初始化并加载先前的变化,可以将卡顿分散至调用时。

代理模式可以在不影响原本类的情况下,为原本类增添额外的功能(比如记录日志)。

用法不同

装饰器模式由外部调用,可以自由选择是否使用装饰器,new C(new B(new A()))new C(new A()) 都是可行的(A 为被装饰类)。

代理模式为内部调用,由代理模式内部调用被代理对象。单独的被代理对象很可能功能不全,甚至根本就无法被外部创建,外部调用通常也是直接调用代理类。

相关文章
|
6月前
结构型 代理模式
结构型 代理模式
40 0
|
28天前
|
设计模式 缓存 C#
C# 一分钟浅谈:装饰者模式与代理模式
【10月更文挑战第12天】本文介绍了面向对象编程中的两种常见设计模式:装饰者模式和代理模式。装饰者模式允许在运行时动态地给对象添加功能,而代理模式则通过代理对象控制对另一个对象的访问。文章详细讲解了这两种模式的概念、常见问题、如何避免问题以及代码示例,帮助读者更好地理解和应用这些设计模式。
35 13
|
6月前
|
缓存 数据安全/隐私保护 C++
【C++】—— 代理模式
【C++】—— 代理模式
|
6月前
|
设计模式
装饰器模式
装饰器模式
33 0
|
6月前
|
设计模式 C++
【C++】—— 装饰器模式
【C++】—— 装饰器模式
|
6月前
|
Java Spring
代理模式
代理模式
54 0
|
Java 网络安全 Maven
代理模式的运用
代理模式的运用
54 0
|
设计模式
2023-6-26-第八式装饰器模式
2023-6-26-第八式装饰器模式
74 0
|
前端开发 BI
关于装饰器模式我所知道的
关于装饰器模式我所知道的
77 0
|
Java Spring
代理模式你了解多少
代理模式你了解多少
76 0