使用无法修改的完全独立的继承树对类进行子类化

时间:2009-02-25 10:06:38

标签: architecture inheritance multiple-inheritance

如果可以修改类的继承树以便从另一个继承树的限制,有人会如何加入两个具有独立继承树的类来桥接上下文边界?

即,如果一个项目是保存到数据库的实体,那么就说:

public class Stockitem : StockItemBase {
...
}
需要使用绘图组件显示

,例如:

Public class GraphicNode : BaseNode { ... }

由于有许多共同的成员,因此只需要一个子类stockitemgraphicnode会很高兴。

设计解决方案的最佳方法是什么?

4 个答案:

答案 0 :(得分:2)

组合物。

创建一个新类,该类既不继承,也包含要在其中使用的类的实例,然后公开要调用的方法。

谷歌“超越遗传的构成”对于这个主题的反应比我的好多了

答案 1 :(得分:1)

使用多重继承是可能的,如果树完全独立,则不会有the diamond problem

答案 2 :(得分:1)

如果语言允许,可以使用多重继承。但是我不太了解它。

否则,您可以从StockItemNode : GraphicNode

构建StockItem
class ItemNodeFactory
{
  ...
  StockItemNode create(StockItem);
  ...
}

您可以将属性从StockItem转移到StockItemNode(set-get)的实例中,这将完全解耦这两种类型。或者您可以StockItemNode包装StockItem(组合)的实例。

反过来(在NodeStockItem : StockItem中使用GraphicNode和/或包裹StockItem)会导致特别糟糕的设计,因为您不想硬连线耦合到域/业务/数据实体(GraphicNode)内的特定表示(StockItem)。

答案 3 :(得分:0)

您可能在StockItem中有一个GraphicNode对象的实例。

这个名为Composition http://en.wikipedia.org/wiki/Object_composition

然后在StockItem中创建方法,只需delegate实际工作到封闭的GraphicNode。