Java:我被困在单身工厂,并希望改进我的方法

时间:2015-09-02 14:25:09

标签: java dependency-injection singleton factory

所以,这是一个非常高级的问题,解决了我多年来一直在做的事情。我知道我的方法可以改进,我正在寻找(或者#34;正确/更好的)生成工厂的方法。

现在已经有一段时间了,我的大脑一直困在写单身工厂。这是工厂的基本伪代码:

public Factory { 
     private static final INSTANCE = new Factory();

     private Factory () {}

     public static Factory instance() { 
         return INSTANCE;
     }        

     public Object createStuff() {
        // impl specific factory details here
        return null;
     }
 }

现在,这种方法让我在代码的其他地方变得非常懒惰,而不必在任何地方维护工厂的实例。我最近加强了我的单元测试游戏,并且在出于测试目的而嘲笑工厂时遇到了问题,这让我质疑我的方法。

我听说依赖注入可能是一个很好的方法,我愿意调查它。我目前的一些项目已经走得太远了,无法调整和引入新方法(因此,现有的东西中没有依赖注入)。

所以,底线:有没有依赖注入的更好的方法是什么?

谢谢! 罗布

2 个答案:

答案 0 :(得分:0)

你对Spring(使用Spring Boot)感到满意吗?

它开始成为轻量级Java应用程序的事实标准。 它可以为开发完全复用的生产应用程序提供大量代码。

答案 1 :(得分:0)

为了使用DI并使依赖于您的工厂的类可测试您需要使您的工厂实现接口,然后使用工厂的类需要在这些类的构造函数中的工厂实例。然后,这将允许您通过提供存储或模拟工厂来测试这些类,该工厂也会对接口进行操作。

像这样的东西

public interface IFactory
{
    object createInstance;
}

public class ClassWithDependencyOnFactory
{
     private IFactory factory;
     public ClassWithDependencyOnFactory(IFactory factory)
     {
        this.factory = factory;
     }

     public void DoSomething()
     {
         var thing = factory.createInstance();
         ...
     }
}

不要假设您需要使用IoC框架(如Spring)来进行DI或获得它带来的解耦的好处。