【发布时间】:2011-05-18 18:46:59
【问题描述】:
取两个基类 A 和 B,它们相似但最好是不同的。每个都有一个子类(A' 和 B'),它们将相同的功能和成员添加到各自的类中。有没有一种设计模式可以让我不必在 A' 和 B' 中重复代码?
我查看了Bridge 和Decorator,但看不出它们是如何工作的。
谢谢, 抢
【问题讨论】:
-
“代码生成”算不算一种设计模式?
标签: c# design-patterns dry
取两个基类 A 和 B,它们相似但最好是不同的。每个都有一个子类(A' 和 B'),它们将相同的功能和成员添加到各自的类中。有没有一种设计模式可以让我不必在 A' 和 B' 中重复代码?
我查看了Bridge 和Decorator,但看不出它们是如何工作的。
谢谢, 抢
【问题讨论】:
标签: c# design-patterns dry
您能否使用组合并将共享代码重构为另一个 C 类?
【讨论】:
取两个基类 A 和 B 相似但最好是 清楚的。每个都有一个子类(A'和 B') 添加相同的功能 和成员各自的 类。
这是一个有点奇怪的起点。如果是我,我会考虑改变这部分设计。
假设这不合理,无论出于何种原因,我认为 Decorator 是避免代码重复的最佳方法。
您将需要创建子类 A' 和 B'。而且您必须在每个中声明添加的方法和属性。这些成员应该委托给另一个可以实现通用功能的类的成员。该类的一个实例将包含在 A' 和 B' 中。
如果这些公共成员的实现很重要,这真的只会为您节省重复。
【讨论】:
策略模式。在第三个类中创建公共代码,并在 A' 和 B' 中为其保存一个实例。
【讨论】:
add the same functionality and members to their respective classes。听起来很接近一个接口,尽管它仍然会有单独的实现。也许类似于Provider 模式? http://msdn.microsoft.com/en-us/library/ms972319.aspx
【讨论】:
mixins 的概念与您想要的很接近。但是,C# 本身并不支持此概念。您可以使用接口和扩展方法来模仿 mixins 的概念,但它看起来不是很漂亮。
请查看此问题以获取更多信息:Is it possible to implement mixins in C#?
【讨论】: