我有一个工厂类CipherBuilder
,其中包含一个静态方法build
,它将StringCipher
对象返回给客户端。
我想隐藏StringCipher
类,因此客户端只能通过CipherBuilder
工厂获取此类对象,并且不能直接调用类构造函数(但它仍然可以使用它的公共方法)。
我目前的实现是创建一个与客户端代码分开的另一个包,并在其中放入三个类,CipherBuilder
工厂(公共),StringCipher
(包私有)和公共它的接口(IStringCipher
)。这样客户端就无法直接调用构造函数,但它仍然可以通过接口使用公共方法。
但是因为我不得不创建一个新的包只是为了隐藏一个类,这感觉就像一个黑客。有没有更好的方法(在Java中),同时将StringCipher保存在与客户端代码相同的包中,并将StringCipher
和CipherBuilder
保存在单独的文件中?
答案 0 :(得分:2)
要将CipherBuilder
和StringCipher
保留在同一个包中,您可以使StringCipher
的构造函数受到保护,这样客户端就无法构造StringCipher
,但{ {1}}仍然具有访问权限,因为两个类都在同一个包中。
我希望这会有所帮助
答案 1 :(得分:0)
你怎么能实现它。
您可以将StringCipher
类定义为CipherBuilder
类中的私有类。如果将StringCipher
编码为接口,则CipherBuilder
中的工厂方法可能会返回一个接口;
其他解决方案,如果您不想要界面,则会在同一个包中定义CipherBuilder
和StringCipher
,并为StringCipher
的构造函数设置访问级别作为包(没有访问级别修饰符)。然后只能在包内创建StringCipher
。
答案 2 :(得分:0)
我认为最简单的方法是:
1)创建你的包
2)在你的包内创建:
public class CipherBuilder{...}
public class IStringCipher{...}
class StringCipher {...}
您的软件包外面没有人会看到CipherBuilder。