代码之家  ›  专栏  ›  技术社区  ›  almog.ori

使用不可修改的完全独立的继承树对类进行子分类

  •  0
  • almog.ori  · 技术社区  · 17 年前

    考虑到两个类的继承树都不能修改为从另一个继承的限制,有人会如何连接两个各自具有独立继承树的类来弥合上下文边界?

    public class Stockitem : StockItemBase {
    ...
    }
    

    需要使用绘图组件显示,例如:

    Public class GraphicNode : BaseNode { ... }
    

    如果能有一个子类就好了 stockitemgraphicnode

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

    4 回复  |  直到 14 年前
        1
  •  2
  •   tddmonkey    17 年前

    组成。

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

    在谷歌上搜索“组合胜过继承”,可以找到比我更好的关于这个主题的漫谈

        2
  •  1
  •   vartec    17 年前

    通过多重继承是可能的,如果树是完全独立的,你就不会有 the diamond problem .

        3
  •  1
  •   eljenso    17 年前

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

    否则,您可以构建一个 StockItemNode : GraphicNode 从a StockItem :

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

    库存商品 进入一个实例 StockItemNode (set-get),这将完全解耦这两种类型。或者你可以 库存项目节点 包装一个实例 库存商品 (组成)。

    反过来做(有 NodeStockItem : StockItem 和/或包裹 GraphicNode 在一个 库存商品 )会导致特别糟糕的设计,因为您不想将耦合硬连线到特定的演示文稿( 图形节点 )域/业务/数据实体内部( 库存商品 ).

        4
  •  0
  •   amartynov    17 年前

    StockItem中可能有GraphicNode对象的实例。

    此命名组成: http://en.wikipedia.org/wiki/Object_composition

    然后在StockItem中创建方法 delegate 对封闭的GraphicNode进行实际操作。