Java 适合任务的设计模式

Java 适合任务的设计模式,java,spring,design-patterns,strategy-pattern,Java,Spring,Design Patterns,Strategy Pattern,数据库包含类型行:TYPE1、TYPE2、type3、TYPEN 当用户向我的服务发送请求并等待响应时,我下一步: 1) 呼叫responseService获取响应: @Override public GetResponseResponse getResponse(GetResponseRequest request) return responseService.getResponse(request); } @Override @Transactional public G

数据库包含类型行:
TYPE1、TYPE2、type3、TYPEN

当用户向我的服务发送请求并等待响应时,我下一步:

1) 呼叫
responseService
获取响应:

@Override
public GetResponseResponse getResponse(GetResponseRequest request) 
       return responseService.getResponse(request);
}
@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;
}
2) 在
响应服务中
准备响应:

@Override
public GetResponseResponse getResponse(GetResponseRequest request) 
       return responseService.getResponse(request);
}
@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);
}

我的问题:在这项任务中使用策略是否正确?还有别的可能吗?该策略是否适合
unposponsebuilder context
unposponsebuilder
的正确名称
public CreateResponseStrategy {
  public Element createResponse(SmevMessage smevMessage);
}

public FirstCreateResponseStrategy implements CreateResponseStrategy {
  public Element createResponse(SmevMessage smevMessage) {
  //logic
  }
}

public SecondCreateResponseStrategy implements CreateResponseStrategy {
  public Element createResponse(SmevMessage smevMessage) {
  //logic
  }
}
在随后的responseService课程中:

final ImmutableMap<String,CreateResponseStrategy> strategyMap = ImmutableMap.<String, CreateResponseStrategy>builder()
            .put("firstType", new FirstCreateResponseStrategy())
            .put("secondType",new SecondCreateResponseStrategy() )
            .build()

public GetResponseResponse getResponse(GetResponseRequest request) {

    //get data from DB
    SmevMessage smevMessage = smevMessageService.findOneFinished(request.getP1(), request.getP2());

    GetResponseResponse getResponseResponse = new GetResponseResponse();

    Element element = strategyMap.get(smevMessage.getRequestType()).createResponse(smevMessage); //additionaly check if element exists in map

    getResponseResponse.setAny(element);

    return getResponseResponse;
}
final ImmutableMap strategyMap=ImmutableMap.builder()
.put(“firstType”,新的FirstCreateResponseStrategy())
.put(“secondType”,新的SecondCreateResponseStrategy())
.build()
公共GetResponseGetResponse(GetResponseRequest请求){
//从数据库获取数据
SmevMessage SmevMessage=smevMessageService.findonefished(request.getP1(),request.getP2());
GetResponseResponse GetResponseResponse=新建GetResponseResponse();
Element Element=strategyMap.get(smevMessage.getRequestType()).createResponse(smevMessage);//另外检查映射中是否存在元素
getResponseResponse.setAny(元素);
返回getResponseResponse;
}
也许这种方法在你的情况下会更好。如果可以的话就告诉我