我发现自己希望界面可以由几个类中实现的方法组成。如果我能做到这一点,我可以为一个角色创建一个接口,该角色具有该类中的一个函数和该类中的一个函数。
有没有语言支持这个?是否有可能采用典型的Java / C#/ VB.NET样式OO?
例如:我有一个带有值对象的函数,并将所有部分保存到正确的表中。我刚刚创建了一个名为StatsPersistence
的接口,我将其注入一个函数,因此我可以对其行为进行单元测试,但它缺少一个方法。我想能够添加一个方法,但该方法与前两个方法不同,所以这显然是不可能的。所以,我在一个类中有2个方法,在另一个类中有1个,但它们都是“StatsPersistence”的“角色”所需要的。此外,这些方法也是其他角色所需要的三种方法,而不仅仅是这一方法。
我有什么:
interface StatsPersistence
public saveSession(session) // fulfilled in much larger StatsActiveRecord
public saveAppUse(appUse) // fulfilled in much larger StatsActiveRecord
我想要的是什么:
interface StatsPersistence
public saveSession(session) // fulfilled in much larger StatsActiveRecord
public saveAppUse(appUse) // fulfilled in much larger StatsActiveRecord
public updateUnit(name) // fulfilled in much larger UnitActiveRecord
我可以只创建一个包含所有三个方法的新类,并让该类只调用两个实现者,但这看起来就像很多OOverkill。
我的想法倾向于:
答案 0 :(得分:2)
假设您有一个StatsPersistence
类型的变量。接口契约强制StatsPersistence
的任何实例具有这三种方法。因此,StatsActiveRecord
无法存储为StatsPersistence
,UnitActiveRecord
也相同。这意味着两个对象都不能是StatsPersistence
的实例,因为这两个对象都不符合接口契约。因此,不可能在类之间拆分接口实现。
有一些替代方案。
正如您所提到的,您可以拥有一个实现接口的主类,并调用两个单独的类。这可能很棘手,因为两个“子类”由主人联系在一起。
你提到界面太宽泛了。如果合适,您可以拆分界面。
最佳解决方案(在一般情况下)是组合类。如果两个班级必须共同决定谁做某些事情,他们也可能是一个班级。