我有一家工厂,可以根据参数创建操作。它们实现了我的Action
接口。
interface Action {
ActionResult execute() throws Exception;
}
class CopyAction implements Action {
...
}
class MoveAction implements Action {
...
}
我有大约30种不同的动作。 我的工厂看起来像这样:
public class ActionFactory{
private ClassA dependency1;
private ClassB dependency2;
private ClassC dependency3;
private UtilClass1 utilDependency1;
private UtilClass2 utilDependency2;
@Inject
public ActionFactory(ClassA dependency1, ClassB dependency2, ClassC dependency3, UtilClass1 utilDependency1, UtilClass2 utilDependency2) {
this.dependency1 = dependency1;
this.dependency2 = dependency2;
this.dependency3 = dependency3;
this.utilDependency1 = utilDependency1;
this.utilDependency2 = utilDependency2;
}
Action createAction(ActionParameters parameters, ...) {
switch (parameters.getActionType()) {
case COPY_ACTION:
return new CopyAction(parameters, dependenc1, dependency2, utilDependency1);
case MOVE_ACTION:
return new MoveAction(parameters, dependency3, utilDependency1, utilDependency2);
// many more cases for all the other actions
}
}
}
我在项目中使用了依赖注入(焊接),而工厂则注入了需要创建动作的类中。
所以现在我将依赖注入和new
混合在一起。此外,我的工厂依赖于许多不同的事物,这些事物仅在几个动作创建过程中使用。并非所有动作都需要所有依赖项。
我不知道这是否是一个好方法,但是有些感觉不对。混合di和new
似乎是错误的。但是我不知道如何做得更好。我什至不知道是否有更好的方法可以做到这一点,或者我的感觉只是错了?