我正在尝试实现一个库,其中Class1提供了大约五个公共方法Method1到Method5。 Class2提供了两种方法-Method6和Method7。而Class3提供了一种方法-Method8。现在,对于最终用户,我想公开这些类的组合方法。例如。如果最终用户实例化一个名为Class1Class2的类,则他们应有权访问Method1到Method7,如果实例化一个名为Class1Class3的类,则他们应有权访问Method1到Method5和Method8。
我可以想到3种不同的方法(也请提出其他建议):
(1)多重继承:保持Class1,Class2和Class3中的每一个不变。然后,创建一个新的类Class1Class2,该类公开继承自Class1和Class2。同样,我可以创建一个Class1Class3类,该类公开继承自Class1和Class3。
(2)多级继承:我可以从Class1派生Class2,然后调用该Class1Class2。然后从Class1中调用Class3,然后将其称为Class1Class3。如果需要Class1Class2Class3,则可以从Class2和Class3继承该类,而Class2和Class3都是从Class1派生的。在这里,我们将使用虚拟继承来解决钻石问题。我不希望使用Class2Class3,因此在这里应该不是问题。
(3)组成:保持Class1,Class2和Class3的每个状态不变。创建实现每个方法Method1到Method7的Class1Class2,并在内部将它们相应地委派给Class1和Class2的对象。同样,Class1Class3将组成Class1和Class3的对象。使用这种方法,我们需要为所有方法提供实现,并将它们委托给组成的对象。
尽管“组合之上的继承”准则通常适用于类的松散耦合等,但在上述情况下,我们必须从单独的具体实现中进行代码重用,但是方法1或2似乎是更好的选择。
我对此表示感谢。