我有一个带有静态方法CipherBuilder的工厂类build,该方法将StringCipher对象返回给客户端。
我想隐藏StringCipher类,因此客户端只能通过CipherBuilder工厂获取此类型的对象,并且不能直接调用类构造函数(但它仍应能够使用其公共方法) 。

我当前的实现是创建与客户端代码分开的另一个包,并将其中的三个类放入CipherBuilder工厂(是公共的),StringCipher(包私有的)和对其的公共接口(IStringCipher )。这样,客户端无法直接调用构造函数,但仍可以通过接口使用公共方法。

但是由于我不得不创建一个新的程序包只是为了隐藏一个类,所以感觉就像是在被黑客入侵。是否有更好的方法(在Java中),同时将StringCipher与客户端代码保留在同一程序包中,并将StringCipherCipherBuilder保留在单独的文件中?

最佳答案

为了将CipherBuilderStringCipher保留在同一程序包中,可以使StringCipher的构造函数受到保护,这样客户端就不能构造StringCipher,但是CipherBuilder仍然可以访问,因为这两个类都位于同一包。

我希望这有帮助

09-25 22:03