我有两节课。我们称它们为PostClassCommentClass。这两个类都实现了Reportable接口:

public interface Reportable {

    void report();

    boolean isReported();

    . . .


现在,我需要为每个类添加两个其他方法。这些方法在逻辑上适合同一接口,但需要使用不同的名称。例如:

PostClass将具有方法-> remove()restore()

CommentClass将具有方法-> hide()show()

问题:设计此更改的首选方式是什么?选项如我所见:


创建一个附加接口,该接口将扩展Reportable接口。问题:接口太多
将所有四个新方法添加到Reportable界面中,然后在每个类中不使用不相关的两个方法。问题:不整洁/难看

最佳答案

只要接口的用途和目的明确,就不必担心会有更多接口。这两个选项有效:


PostClass实现RemovableReportable,扩展了Reportable;和
CommentClass实现HideableReportable,它扩展了Reportable
PostClass同时实现ReportableRemovable;和
CommentClass同时实现ReportableHideable


但是将所有四个新方法添加到Reportable界面中并在每个类中保留两个未实现的方法是非常错误的,因为这不会导致代码干净,易于理解和使用。开发人员必须学习在每种情况下使用哪种方法,从而使您的代码更难以使用和修改。如果某些开发人员调用错误的方法会怎样?如果错误的方法不起作用,则可能会忽略错误。如果抛出异常,则只会在运行时捕获错误。而且,如果它调用另一种方法,那么您有两种方式做同一件事,这也是不好的和令人困惑的。

接口中未使用的方法是代码异味,并且可能表示设计缺陷。

07-26 04:39