重构现有模式

时间:2017-11-02 09:08:51

标签: java spring spring-boot design-patterns

我正在使用Factory Pattern来初始化对象:

public class Factory
{
    @Autowired
    private HandlerOne handlerOne;
    @Autowired
    private HandlerTwo handlerTwo;

    public <T extends Handler> T createHandler(Class<T> type) {
        switch(type.getSimpleName()){
            case "HandlerOne":
                return type.cast(handlerOne.handle());
    }
}

这就是我如何使用工厂本身:

handlerFactory.createHandler(HandlerOne.class);

所有处理程序都位于名为com.mydomain.project.Handlers

的单独包中

如您所见,如果有X处理程序实现,我需要在工厂内创建X变量,我认为这很糟糕。是否存在可以应用的现有模式以使此过程更容易?

1 个答案:

答案 0 :(得分:1)

Spring可以将所有类型的bean作为列表注入:

public class Factory
{
    @Autowired
    private List<? extends Handler> handlerList; 

    public <T extends Handler> T createHandler(Class<T> type) {
        for(Handler handler : handlerList) {
            if (type.getSimpleName().equals(handler.getClass().getSimpleName()) {
                return handler;
            }
        }

        return ...; //some default value
    }
}