Java 界面设计 - 辅助方法
Java Interface Design - Helper Methods
我有这样的界面
public interface Manager {
public void manage();
}
现在,所有 Manager
都需要加载工作来管理,但是,我对将 public void loadWork()
添加到界面感到很复杂...
一方面,所有 Manager
都会这样做,但另一方面,Manager
class 的用户不需要知道 loadWork()
.
问题:向接口添加 "helper" 或 "setup" 类型方法是否是一种不好的做法?
在接口中添加 "setup" 方法并不总是一个坏主意。例如,Java EE 有一个名为 ServletContextListener 的接口,它纯粹是为了进行设置和关闭。
有时甚至可以接受使用您实际上永远不会直接调用的方法创建接口,例如 Runnable or the Callable 接口。
话虽如此,您似乎想要强制您的开发人员在 Manager 中实现 loadWork() 方法,但您还想对 class' 用户隐藏它。
正如您所说,一种选择是在界面中添加方法,但这样就可以访问该方法(您不想要)。如果您不希望该方法具有可见性,我会看到两个选项:
- 将 class Manager 抽象为 class 并添加 loadWork() 受保护的方法。
- 使用方法 loadWork() 创建一个名为 LoadWorker 的接口。然后创建一个抽象 class AbstractManager 实现 Manager 并具有 private/protected LoadWorker 字段。这样,即使 loadWork() 是 public,AbstractManager 的用户也无法访问它,因为它是通过 protected/private 字段 (LoadWorker).
最终在过度工程和良好设计之间取得了平衡。您可以根据具体需求做出决定。然而,没有'perfect solution'.
我有这样的界面
public interface Manager {
public void manage();
}
现在,所有 Manager
都需要加载工作来管理,但是,我对将 public void loadWork()
添加到界面感到很复杂...
一方面,所有 Manager
都会这样做,但另一方面,Manager
class 的用户不需要知道 loadWork()
.
问题:向接口添加 "helper" 或 "setup" 类型方法是否是一种不好的做法?
在接口中添加 "setup" 方法并不总是一个坏主意。例如,Java EE 有一个名为 ServletContextListener 的接口,它纯粹是为了进行设置和关闭。 有时甚至可以接受使用您实际上永远不会直接调用的方法创建接口,例如 Runnable or the Callable 接口。
话虽如此,您似乎想要强制您的开发人员在 Manager 中实现 loadWork() 方法,但您还想对 class' 用户隐藏它。 正如您所说,一种选择是在界面中添加方法,但这样就可以访问该方法(您不想要)。如果您不希望该方法具有可见性,我会看到两个选项:
- 将 class Manager 抽象为 class 并添加 loadWork() 受保护的方法。
- 使用方法 loadWork() 创建一个名为 LoadWorker 的接口。然后创建一个抽象 class AbstractManager 实现 Manager 并具有 private/protected LoadWorker 字段。这样,即使 loadWork() 是 public,AbstractManager 的用户也无法访问它,因为它是通过 protected/private 字段 (LoadWorker).
最终在过度工程和良好设计之间取得了平衡。您可以根据具体需求做出决定。然而,没有'perfect solution'.