将方法添加到具有不同基类的多个类

时间:2017-08-02 01:11:50

标签: oop typescript

背景

我正在创建一个GUI,其中包含由不同节点类型和连接组成的图形,以及可以从节点创建的图。

我的inheritance tree看起来像这样:

original inheritance tree

如您所见,所有图形节点和图都是可移动的。图和一些图节点可以调整大小。现在,我想让用户能够将所有图形节点组合在一起,在另一个名为Network的节点类型中。

network inheritance tree

所以我想为所有非Plot类添加一个名为restrict的方法,尽管它们有不同的基类。

问题

我听说过的一种方法是use mixins,但他们觉得有点矫枉过正。是否有更简单的方法将方法添加到从不同基类继承的类?在这种情况下,如何牢记“继承的构成性”原则?

我认为我不应该只将restrict添加到Component,因为这会为Plots创建一个永远无法使用的无用方法,这感觉就像是一个糟糕的代码味道。

我知道我可以使用Interfaces进行多重继承,但是Interfaces不会自动使用引用实现,因此我必须将一堆super调用复制到每个方法定义中。这感觉就像很多代码重复。如果实现类没有给出实现,有没有办法从接口自动使用引用实现?

1 个答案:

答案 0 :(得分:2)

我想发表评论,询问有关您情况的更多信息,以便我可以更好地准备答案,但我的声誉数量不允许(鸡和鸡蛋情景阻止我构建更好的答案有更多的声誉,发表评论...)所以这是我现在最好的答案,我可以更新。

直觉我认为你的问题&解决方案非常概念化,一旦解决了概念问题,解决方案就不需要任何花哨的编码。

如果我对你正在做的事情有一个更好的“现实世界”的想法,我相信我可以帮助你想出一些代码设计来实现它,但目前它是任意的“节点”等。例如,你所谈论的这种“分组”的本质是什么?

不知道其他什么,我有一些建议;

  • 简单地让PassthroughNode从ResizableComponent继承有什么含义?在某些情况下,这可能会导致对象占用比它需要的更多的资源,但是如果它没有增加太多,并提供您所需的功能并且是最简单的更改,那么这是一个可行的选择
  • 你根本没有提到“接口”,这让我觉得你没有意识到它们,因为它似乎正是你在这里所需要的。 Node和PassthroughNode都实现了一个“Groupable”接口,并在内部拥有自己的如何使自己“可分组”的实现。
  • 这可能很疯狂,但组件基类可能会实现可分组行为,然后任何对象都可以分组:)