【发布时间】:2011-01-06 11:05:23
【问题描述】:
我理解装饰器模式,这是最简单的术语。这个想法是一个类包装另一个类,其中装饰器方法希望在对装饰对象调用相同方法之前和/或之后运行一些其他代码。
但是,我遇到了不能简单地调用修饰方法的情况,因为它有一些不希望的副作用。不过,我确实希望运行大部分装饰方法。
所以我相信我需要将装饰方法拆分为多个方法,然后在装饰器中我可以调用其中一些,运行我的装饰代码,然后调用其他一些 - 错过了我不想要的副作用.
但是,为了保持多态性,这意味着将这些方法添加到装饰对象和装饰对象实现的接口中。这是不可取的;它们不应该是公开的,这实际上意味着被装饰的类知道它将如何被装饰。
我相信模板模式可能更合适,其中抽象基类依次调用每个较小的方法,其中“装饰器”只是为其关心的那些提供替代实现。然而,这并不完全是“组合优于继承”,那么您有什么建议呢?
【问题讨论】:
标签: design-patterns decorator side-effects