参考:个人理解简单工厂模式和策略模式的区别_Leonis丶L的博客-CSDN博客_策略模式和工厂模式的区别
下面这个是有个工厂类,用于获取TaskService,其中TaskService存在多个实现类,其中通过一个taskType区分。
@Service
public class TaskFactory {
private final Map<String, TaskService> taskMap = new ConcurrentHashMap<>();
@Autowired
public TaskFactory(Map<String, TaskService> taskMap) {
taskMap.forEach(this.taskMap::put);
}
public TaskService getTaskServiceByTaskType(String taskType){
TaskService service = this.taskMap.get(taskType);
if(service == null){
throw new BizException(String.format("taskType:%s dose not support", taskType));
}
return service;
}
}
主要通过下面这个注入实现
@Autowired
public TaskFactory(Map<String, TaskService> taskMap) {
taskMap.forEach(this.taskMap::put);
}
taskMap中的key是TaskService的每个子类Service实现的别名,比如@Component("10") TaskServiceImpl1、@Component("20") TaskServiceImpl2、@Component("30") TaskServiceImpl3等,value为具体的实现类,这样可以通过这个map的key获取具体的实现类