什么相当于封装内部功能的包 - 私有接口?

时间:2013-12-10 22:49:29

标签: java interface scope encapsulation

我试图封装服务包的所有内部功能。我的大多数类和方法都是包私有的。我有一些内部接口,我不想在包外暴露。我可以使接口本身是package-private,但是所有方法仍然是公共的(接口方法的默认范围)。

我可以选择从此程序包中的内部实现中删除公共方法签名吗?

我正在使用接口,以便我可以使用spring轻松切换实现。

需要考虑的一些事项:使用源代码分析的开发工具会将接口方法报告为公共API方法。例如,UML生成器会生成误导性的UML图,错误地将其显示为公共方法。

1 个答案:

答案 0 :(得分:1)

正如@Bart已经指出的,一种可能的解决方案是使用抽象类而不是接口。与此概念相关的可能问题是单继承问题。

另一个解决方案可能是将不同包中的“私有”接口分开,不需要与服务包一起发布,因为这种方法可能会破坏接口的语义,特别是如果一个逻辑接口会有“私人”和“公共”部分。

我想到的最后工作是利用一些模式,例如: Double dispatchVisitor可能很有用。