依赖注入与工厂结合

时间:2019-11-27 08:19:24

标签: java dependency-injection architecture factory weld

我有一家工厂,可以根据参数创建操作。它们实现了我的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似乎是错误的。但是我不知道如何做得更好。我什至不知道是否有更好的方法可以做到这一点,或者我的感觉只是错了?

0 个答案:

没有答案