我有两节课。我们称它们为PostClass
和CommentClass
。这两个类都实现了Reportable
接口:
public interface Reportable {
void report();
boolean isReported();
. . .
现在,我需要为每个类添加两个其他方法。这些方法在逻辑上适合同一接口,但需要使用不同的名称。例如:
PostClass
将具有方法-> remove()
,restore()
CommentClass
将具有方法-> hide()
,show()
问题:设计此更改的首选方式是什么?选项如我所见:
创建一个附加接口,该接口将扩展
Reportable
接口。问题:接口太多将所有四个新方法添加到
Reportable
界面中,然后在每个类中不使用不相关的两个方法。问题:不整洁/难看 最佳答案
只要接口的用途和目的明确,就不必担心会有更多接口。这两个选项有效:PostClass
实现RemovableReportable
,扩展了Reportable
;和CommentClass
实现HideableReportable
,它扩展了Reportable
。PostClass
同时实现Reportable
和Removable
;和CommentClass
同时实现Reportable
和Hideable
。
但是将所有四个新方法添加到Reportable
界面中并在每个类中保留两个未实现的方法是非常错误的,因为这不会导致代码干净,易于理解和使用。开发人员必须学习在每种情况下使用哪种方法,从而使您的代码更难以使用和修改。如果某些开发人员调用错误的方法会怎样?如果错误的方法不起作用,则可能会忽略错误。如果抛出异常,则只会在运行时捕获错误。而且,如果它调用另一种方法,那么您有两种方式做同一件事,这也是不好的和令人困惑的。
接口中未使用的方法是代码异味,并且可能表示设计缺陷。