【发布时间】:2015-08-12 21:55:08
【问题描述】:
考虑如下场景:我有一个类A由Part 1、Part 2等各个部分组成,我想通过子类化扩展A的功能。
问题:如果我试图以同样的方式覆盖单个“部件”的行为(有更好的术语吗?),我将不得不为每个发生变化的部件创建一个子类,这很快就会变得混乱和混乱.
简而言之:我想重写类方法而不求助于 子类化。
我想到了一个解决方案,但我不确定这是否是个好主意:
假设我想覆盖Part::Method。不使用我的语言提供的继承机制,我可以通过以下方式“伪造”一个覆盖能力:
- 将
Part类传递给函数MethodOverride(例如,作为匿名函数),并且 - 有
Part::Method呼叫MethodOverride
我认为这种方法有两个缺点:
- 它忽略了语言的(完全有能力但不切实际的)继承特性,这可能会产生无法预料的副作用
- 访问
Part的非公开成员变得很麻烦
我的问题:是否有既定的设计模式可以解决 以类似(或更好)的方式描述问题?有什么缺点吗 我错过了?
【问题讨论】:
-
听起来您在描述strategy pattern,但我不清楚您所说的
Part到底是什么意思。可能会通过将每个部分分成自己的类来改进设计。 -
如果您指定什么是 A、第 1 部分、第 2 部分,您可能会得到更好的答案...上下文有很大的不同。
标签: design-patterns subclassing overriding