![]() |
1
6
动态的 我认为“动态”这个词的含义与共和党写这本书时有所不同。 我猜他们想说的是“在不实际修改基础对象的代码/定义的情况下向对象添加前/后行为”。对于客户机,对象(修饰或不修饰)似乎是相同的。 今天,dynamic与动态语言相关联,从这个意义上说,它意味着松散的类型和在运行时向对象添加方法/行为的能力。 替代子类化
修饰符使用继承,但是它们不从正在修饰符的对象继承。 它们继承公共接口,以便公开与修饰对象相同的方法(模拟)。他们使用组合作为行为-通过委托添加岗前行为。
|
![]() |
2
0
看来戈夫的解释写得很糟糕。当实例是子类时,调用decorator作为子类的替代方法是非常令人困惑的。 Gof说,被装饰的对象及其装饰者必须有一致的接口。显然,这是模式的一个要求,它们通过继承来证明这一点。因此,它们的装饰器模式中既有动态组件,也有静态组件。 我还可以看到如何反转模式并使装饰器成为装饰对象的委托,但这可能会导致复杂的实现。 在Lisp或groovy这样的动态语言中,我认为您可以将装饰逻辑合并到类本身的draw()逻辑中。对接口一致性的要求是不必要的,也不需要为装饰对象和装饰器设置单独的类。 我将把学习lisp添加到bucket列表中,以便了解动态语言中设计模式的变化。 |
![]() |
insipidintegrator · 通过迭代器/指针访问命名空间? 6 月前 |
|
Ben · 如何使用带有部分应用的过滤器功能的角度材质日期选择器? 1 年前 |
![]() |
larn · 这是工厂模式还是战略模式? 1 年前 |
![]() |
Community wiki · 您对存储库模式的理解是什么? 1 年前 |