我有一个带有静态方法CipherBuilder
的工厂类build
,该方法将StringCipher
对象返回给客户端。
我想隐藏StringCipher
类,因此客户端只能通过CipherBuilder
工厂获取此类型的对象,并且不能直接调用类构造函数(但它仍应能够使用其公共方法) 。
我当前的实现是创建与客户端代码分开的另一个包,并将其中的三个类放入CipherBuilder
工厂(是公共的),StringCipher
(包私有的)和对其的公共接口(IStringCipher
)。这样,客户端无法直接调用构造函数,但仍可以通过接口使用公共方法。
但是由于我不得不创建一个新的程序包只是为了隐藏一个类,所以感觉就像是在被黑客入侵。是否有更好的方法(在Java中),同时将StringCipher与客户端代码保留在同一程序包中,并将StringCipher
和CipherBuilder
保留在单独的文件中?
最佳答案
为了将CipherBuilder
和StringCipher
保留在同一程序包中,可以使StringCipher
的构造函数受到保护,这样客户端就不能构造StringCipher
,但是CipherBuilder
仍然可以访问,因为这两个类都位于同一包。
我希望这有帮助