我的一位同事想出了一个在创建基类或接口之间进行选择的经验法则。
他说:
想象一下您将要实现的每个新方法。对于它们中的每一个,请考虑以下问题:是否可以由多个类以完全相同的形式实现此方法,而无需进行任何更改?如果答案为“是”,则创建一个基类。在其他所有情况下,请创建一个接口。
例如:
考虑类
cat
和dog
,它们扩展了类mammal
并具有一个方法pet()
。然后我们添加类alligator
,该类不会扩展任何内容并且具有一个方法slither()
。现在,我们要
eat()
为所有这些方法添加一个方法。如果实施
eat()
方法将是完全一样的cat
,dog
而且alligator
,我们应该创建一个基类(比方说,animal
),它实现了这个方法。但是,如果它的实现
alligator
有丝毫不同,我们应该创建一个IEat
接口并制作mammal
和alligator
实现它。
他坚持认为这种方法适用于所有情况,但对我来说似乎过于简化了。
遵循此经验法则是否值得?
is a
,接口应为acts like
或is
。因此,狗is a
哺乳动物和acts like
食者。这将告诉我们,哺乳动物应该是一类,食者应该是一种界面。它一直是非常有用的指南。旁注:的一个例子is
是The cake is eatable
或The book is writable
。
alligator
eat
当然,的实现不同之处在于它接受cat
和dog
作为参数。