Java接口设计 - 帮助方法

时间:2015-03-05 21:18:36

标签: java software-design

我有一个像这样的界面

public interface Manager {
    public void manage();
}

现在,所有Manager都需要加载要管理的工作,但是,我对将public void loadWork()添加到界面感到复杂......

一方面,所有Manager都会执行此操作,但另一方面,Manager类的用户无需了解loadWork()

问题:在界面中添加“helper”或“setup”类型方法是不好的做法?

1 个答案:

答案 0 :(得分:1)

在界面中添加“setup”方法并不总是一个坏主意。例如,Java EE有一个名为ServletContextListener的接口,纯粹是为了进行设置和关闭。 有时甚至可以接受使用您实际上从不直接调用的方法的接口,例如RunnableCallable接口。

据说,您似乎想要强制开发人员在Manager中实现loadWork()方法,但您也希望将其隐藏在类的用户中。 正如您所说,一个选项是在界面中添加方法,但这样可以访问该方法(您不需要)。如果您不希望该方法具有可见性,我会看到两个选项:

  1. 使类 Manager 成为一个抽象类,并添加 loadWork()受保护的方法。
  2. 使用方法 loadWork()创建名为 LoadWorker 的界面。然后创建一个实现 Manager 的抽象类 AbstractManager ,并将其作为私有/受保护的 LoadWorker 字段。这样,即使 loadWork()是公开的,也无法通过 AbstractManager 的用户访问它,因为它是通过受保护/私有字段调用的( LoadWorker )。
  3. 最后,在过度工程和良好设计之间取得平衡。您可以根据具体需求做出决定。然而,没有“完美的解决方案”。