我有一个需要初始化的类,然后才能开始工作。但是,我不想在我的对象中创建它,我希望它被注入 - 所以我需要同时拥有init()和run()。
然而,这会产生一个问题 - 对象现在有状态,我正试图避免它。是否有设计模式来克服这种情况?
答案 0 :(得分:4)
关于依赖注入:
依赖注入只是将逻辑实现传递到类中的一个奇特术语。依赖注入的最基本形式是constructor
。您只需传入一个不希望出现在类中的实例,作为构造函数的参数。
public interface Logic
{
public void do();
}
public class MyClass
{
private final Logic logic;
public MyClass(final Logic logic)
{
this.logic = logic;
}
public void doLogic() { this.logic.do(); }
}
public class MyLogic implements Logic
{
public void do() { /* custom logic goes here */ }
}
public class Main
{
public static void main(final String[] args)
{
final MyClass myClass = new MyClass(new MyLogic());
myClass.doLogic();
}
}
构建课程:
确保完全构造和初始化类的一种好方法是FactoryMethod
模式。创建static MyClass create();
方法并制作MyClass
构造函数private
并初始化您的类,并确保它在传递之前有效。
public class MyClass
{
/** Factory Method, only way to create a MyClass instance */
public static MyClass create()
{
final MyClass instance = new MyClass();
// initialize class however you need it
return instance;
}
private MyClass()
{
// normal constructor, if no logic you still need this
// to make sure it can only be created by the Factory Method
super();
}
}
答案 1 :(得分:0)
在这种情况下,听起来你应该将你的依赖项作为构造函数参数提供。这为您提供了附加final
关键字的额外安全性,因此您可以确保它永远不会再次设置。