java - 根据值实现不同流程的最佳设计是什么?
问题描述
在此先感谢您的帮助。我正在设计一个新的基于 Java Spring Boot 的应用程序,负责根据输入参数返回状态。根据此输入参数,要实现最终状态,必须创建不同的流程,尽管有时它们在流程之间共享功能。
我正在考虑实现这个想法的最佳方式,我一直在寻找不同的设计模式,但我没有找到正确的设计,我可能是一个糟糕的寻求者......
应用程序通过 REST 端点接收请求并处理它。我的想法如下:
1)创建一个涉及主要功能的接口:
@FunctionalInterface
public interface StatusService {
Response getStatus(Request request);
}
2)实现主要功能并调用类选择器:
@Service
public class StatusServiceImpl implements StatusService {
@Autowired // Yes, constructor injection it's better ;)
private Selector selector;
@Override
public Response getStatus(Request request) {
validateRequest(request);
UserInfo userInfo = getCommonInfoByRequest(request);
return selector.getStatusSelectingWorkFlow(userInfo);
}
}
3) 使用控制流语句实现选择器:
@Component
public class Selector {
@Autowired
private WorkFlowAImpl a;
public Response getStatusSelectingWorkFlow(UserInfo userInfo) {
System.out.println("Selecting workflow by param from request");
switch (WorkFlowsEnum.valueOf(request.getParam())) {
case A:
return a.getStatus(userInfo)
case B:
return // Workflow 'b'
case C:
case D:
return // Workflow 'C' and 'D'
default:
System.out.println("Unconsidered workflow");
break;
}
}
}
有人可以就这个想法或更好的选择给我他们的观点吗?
感谢您的时间
解决方案
Strategy Pattern
IMO的经典示例。
Map<WorkFlowsEnum, StatusService> map = new HashMap<>();
map.put(WorkFlowsEnum.SOME, new SomeInstanceOfStatusService());
// ... all others
当您需要根据以下内容完成某些事情时WorkFlowsEnum
:
public Response getItDone(WorkFlowsEnum value, Request request){
return map.get(value).getStatus(request);
}
推荐阅读
- javascript - Can't call a function inside another function Javascript
- django - How can i set pagination dynamically in Django Rest Framework?
- angular - Pass observable from one component to another via service
- sql - Combine CASE and IN
- texas-instruments - TI-Basic: Nspire Basic Function will show Too many arguments
- swift - ContainerVIew not equal to ScrollView
- javascript - How can this click() work from inside content script?
- javascript - How to launch an app automatically from a link
- ios - Xcode UItableviewCell with dynamic height, the first THREE cells have a width around the image but after reuse is called its fixed
- python - 如何在 python 中修复一个 Mad Lib?