我理解装饰器模式的最简单形式,其想法是一个类包装另一个类,在调用装饰对象上的同一方法之前和/或之后运行一些其他代码。
然而,我遇到了这样的情况:不能简单地调用已装饰方法,因为它具有一些不希望出现的副作用。但是,我确实希望大部分装饰方法能够运行。
因此,我认为需要将装饰方法拆分成多个方法,然后在装饰器中可以调用其中一些方法,运行我的修饰代码,然后调用其他一些方法——省略我不想要的副作用。
但是为了保持多态性,这意味着必须将这些方法添加到装饰和被装饰对象实现的接口中。这是不可取的;它们不应该是公共的,而且它有效地意味着装饰的类知道它将如何被装饰。
我认为模板模式可能更合适,一个抽象基类依次调用每个较小的方法,在“装饰器”只需提供所关心的方法的替代实现。但这并不完全符合“组合优于继承”的原则,那你有什么建议?
然而,我遇到了这样的情况:不能简单地调用已装饰方法,因为它具有一些不希望出现的副作用。但是,我确实希望大部分装饰方法能够运行。
因此,我认为需要将装饰方法拆分成多个方法,然后在装饰器中可以调用其中一些方法,运行我的修饰代码,然后调用其他一些方法——省略我不想要的副作用。
但是为了保持多态性,这意味着必须将这些方法添加到装饰和被装饰对象实现的接口中。这是不可取的;它们不应该是公共的,而且它有效地意味着装饰的类知道它将如何被装饰。
我认为模板模式可能更合适,一个抽象基类依次调用每个较小的方法,在“装饰器”只需提供所关心的方法的替代实现。但这并不完全符合“组合优于继承”的原则,那你有什么建议?