![]() |
1
2
对象有一个隐式值:它们的标识(可以通过应用
但最大的缺点是你仍然允许
例如,如果对象的方法如下:
|
![]() |
2
1
一般来说,你不能。除非你将你的装饰类子类化,否则你的 内部的
这
引用(引用装饰器本身)到其他方法。在我看来,decorator与代理最相似:内部装饰对象完全封装在其decorator中,不能直接访问。因此,您必须自己找到一种方法,禁止您的装饰对象直接访问其他对象并能够通过
|
![]() |
3
1
您所描述的是decorator和模板模式的混合。decorator模式允许动态地向对象添加行为(通过使用类似代理的机制)。模板模式将一个算法分解为几个方法,因此您可以通过子类化替换方法来改变对象的行为,或者在您的情况下,通过decorator替换方法。
因此,每次通过添加或删除最外层的装饰器来更改目标对象的行为时,您的设计要么需要用对其最外层装饰器的引用更新目标对象,要么目标对象需要查询另一个对象以获取最外层的装饰器引用。
|
![]() |
insipidintegrator · 通过迭代器/指针访问命名空间? 6 月前 |
|
Ben · 如何使用带有部分应用的过滤器功能的角度材质日期选择器? 12 月前 |
![]() |
larn · 这是工厂模式还是战略模式? 1 年前 |
![]() |
Community wiki · 您对存储库模式的理解是什么? 1 年前 |