在工厂模式中隐藏客户端的产品

时间:2016-06-21 11:32:50

标签: java factory-pattern

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

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

但是因为我不得不创建一个新的包只是为了隐藏一个类,这感觉就像一个黑客。有没有更好的方法(在Java中),同时将StringCipher保存在与客户端代码相同的包中,并将StringCipherCipherBuilder保存在单独的文件中?

3 个答案:

答案 0 :(得分:2)

要将CipherBuilderStringCipher保留在同一个包中,您可以使StringCipher的构造函数受到保护,这样客户端就无法构造StringCipher,但{ {1}}仍然具有访问权限,因为两个类都在同一个包中。

我希望这会有所帮助

答案 1 :(得分:0)

你怎么能实现它。

您可以将StringCipher类定义为CipherBuilder类中的私有类。如果将StringCipher编码为接口,则CipherBuilder中的工厂方法可能会返回一个接口;

其他解决方案,如果您不想要界面,则会在同一个包中定义CipherBuilderStringCipher,并为StringCipher的构造函数设置访问级别作为包(没有访问级别修饰符)。然后只能在包内创建StringCipher

答案 2 :(得分:0)

我认为最简单的方法是:

1)创建你的包

2)在你的包内创建:

   public class CipherBuilder{...}
   public class IStringCipher{...}
   class StringCipher {...}

您的软件包外面没有人会看到CipherBuilder。