我曾经创建单身人士来实现全球共享状态,而且我正在阅读单身人士如何不可测试以及应该使用工厂模式。我遇到的问题是,我无法看到哪里是创建Factory对象的好地方,以便在任何地方都可以访问它。
Factory模式的大多数在线示例都显示了Main
方法中的对象创建。我在一个打包在WAR中的Web应用程序的上下文中进行编程。
例如,我们说我有ServletA
和ServletB
。 ServletA
创建FactoryClass
的实例,但在调用ServletB
时,它无法访问FactoryClass
的实例。
我是尝试实现工厂模式的新手,我想尝试做正确的方式"而不是使用Singleton。此外,我希望能够编写更多可测试的代码。
答案 0 :(得分:0)
我认为你在这里提到了两个问题。首先是要封装对象创建责任以遵循DRY原则(而不是在整个地方重复某些类的实例化),而Factory模式允许您完成此任务。第二个适用于在类中填充依赖项,并且是更复杂的问题,但允许您创建更多分离的代码。
如果您的应用程序很简单(我的意思是非常简单),那么在每个需要它的类中创建工厂实例将会令人满意。第二个选项(如果你有许多工厂和目标对象)将创建某种服务定位器,所以需要一些依赖的类将通过专用方法“询问”它。第三种方式(在我看来最合适) - 您应该使用依赖注入,它为您提供了一个外部机制,用于将实例“注入”到您的对象中。这样,您的代码就非常可测试,封装和可读。另一方面,它需要您使用一些实现DI的框架,如Spring或PicoContainer / NanoContainer等。有关DI和IoC概念的更多详细信息,请参阅精彩文章here