我正在开发一个 Spring 2.0 WebService,它需要根据 WebService 请求的属性之一调用遗留服务的多种方法中的一种。我不想在我的@endpoint 中编写 if/else 检查来实现这一点。我应该使用什么样的设计模式来使其更清晰和可维护,以便当必须支持新的订单类型(请参阅下面的示例代码)时,我不需要添加另一个 else 块。
@Endpoint
public class OrderServiceEndPoint {
@Autowired
private OrderLegacyService orderService;
@PayloadRoot
public @ResponsePayload OrderResponse processRequest(
@RequestPayload OrderRequest request) {
if ("Create".equals(request.type)) {
return orderService.createOrder(request);
} else if ("Modify".equals(request.type)) {
return orderService.modifyOrder(request);
} else if ("Return".equals(request.type)) {
return orderService.returnOrder(request);
} else if ("Replace".equals(request.type)) {
return orderService.replaceOrder(request);
} else {
throw new RequestNotSupportedException();
}
}
我使用 org.springframework.beans.factory.config.ServiceLocatorFactoryBean 来实现工厂模式,以防我有多个相同服务的实现,例如 CreateOrderService、ModifyOrderService、ReplaceOrderService 等。但在这种情况下,我必须调用同一服务的多种方法。我目前无法更改旧服务接口,因为它已被另一个 Web 应用程序使用。