【发布时间】:2018-10-12 08:02:51
【问题描述】:
数据库包含类型的行:TYPE1, TYPE2, TYP3, TYPEN
当用户向我的服务发送请求并等待我接下来做出的响应时:
1) 拨打responseService回复:
@Override
public GetResponseResponse getResponse(GetResponseRequest request)
return responseService.getResponse(request);
}
2) 在responseService 准备回复:
@Override
@Transactional
public GetResponseResponse getResponse(GetResponseRequest request) {
//get data from DB
SmevMessage smevMessage = smevMessageService.findOneFinished(request.getP1(), request.getP2());
//validate
//create general response for all TYPES of response
GetResponseResponse getResponseResponse = new GetResponseResponse();
//get Builder for concrete resonse part
UnpResponseBuilder unpResponseBuilder = unpResponseBuilderContext.getResponseBuilder(smevMessage.getRequestType());
Element element = unpResponseBuilder.createResponse(smevMessage);
//set part to general response
getResponseResponse.setAny(element);
return getResponseResponse;
}
我生成一般响应,但每个响应都有针对每种类型的特定部分。我为此使用策略设计模式。
我有这个接口的一些实现:
public interface UnpResponseBuilder {
Element createResponse(SmevMessage smevMessage);
}
还有一个 bean - 上下文:
public interface UnpResponseBuilderContext {
UnpResponseBuilder getResponseBuilder(SmevMessageType smevMessageType);
void setBuilder(SmevMessageType smevMessageType, UnpResponseBuilder bean);
}
我的问题:对这项任务使用策略是否正确?还有其他可能吗?如果该策略适合 UnpResponseBuilderContext 和 UnpResponseBuilder 的正确名称?
【问题讨论】:
标签: java spring design-patterns strategy-pattern