Java 根据枚举值选择服务类型
我想创建一种工厂模式,但我很挣扎Java 根据枚举值选择服务类型,java,design-patterns,enums,Java,Design Patterns,Enums,我想创建一种工厂模式,但我很挣扎 //OperationType is an Enum public interface SettlementService<OperationType>{ void settleOperation(Order order); } 代码显然不起作用,但希望您能理解。如何实现这一点?要使用工厂模式实现结算服务,您不需要在界面中了解泛型类型 public interface SettlementService { void settleO
//OperationType is an Enum
public interface SettlementService<OperationType>{
void settleOperation(Order order);
}
代码显然不起作用,但希望您能理解。如何实现这一点?要使用工厂模式实现
结算服务
,您不需要在界面
中了解泛型类型
public interface SettlementService {
void settleOperation(Order order);
}
此外,它实现的类如下所示-
public class ClientSettlementService implements SettlementService {
@Override
public void settleOperation(Order order) {
System.out.println("clients!!");
}
}
public class CustomerSettlementService implements SettlementService {
@Override
public void settleOperation(Order order) {
System.out.println("customers!!");
}
}
然后,基于OperationType
enum,要构建的工厂将如下所示
public class SettlementFactory {
private SettlementService provideService(OperationType operationType) {
switch (operationType) {
case CLIENT:
return new ClientSettlementService();
case CUSTOMER:
return new CustomerSettlementService();
default:
throw new UnsupportedOperationException("Unsupported operation type!");
}
}
}
然后,您可以使用此工厂结算给定的订单
,如下所示:
private void settleOrder(Order order) {
SettlementFactory settlementFactory = new SettlementFactory();
SettlementService settlementService = settlementFactory.provideService(order.getOperationType());
settlementService.settleOperation(order);
}
如果您偶然发现Factory类是开销类,并且希望将提供服务的功能简化为使用它的相同方法,则可以使用
Map
并处理提供的服务,例如:
private void settleOrder(Order order) {
Map<OperationType, SettlementService> typeSettlementServiceMap =
Map.of(OperationType.CLIENT, new ClientSettlementService(),
OperationType.CUSTOMER, new CustomerSettlementService());
SettlementService settlementService = typeSettlementServiceMap.get(order.getOperationType());
if (settlementService == null) throw new UnsupportedOperationException("..message..");
settlementService.settleOperation(order);
}
private void结算订单(订单){
地图类型结算服务地图=
Map.of(OperationType.CLIENT,new ClientSettlementService(),
OperationType.CUSTOMER,新CustomerSettlementService());
沉降器服务沉降器服务=类型沉降器服务映射.get(order.getOperationType());
如果(settlementService==null)抛出新的UnsupportedOperationException(“…消息…”);
结算服务。结算操作(订单);
}
在您的界面中结算服务
在哪里使用类型绑定?我真的不知道。该类型仅用于确定我要使用的服务。
private void settleOrder(Order order) {
SettlementFactory settlementFactory = new SettlementFactory();
SettlementService settlementService = settlementFactory.provideService(order.getOperationType());
settlementService.settleOperation(order);
}
private void settleOrder(Order order) {
Map<OperationType, SettlementService> typeSettlementServiceMap =
Map.of(OperationType.CLIENT, new ClientSettlementService(),
OperationType.CUSTOMER, new CustomerSettlementService());
SettlementService settlementService = typeSettlementServiceMap.get(order.getOperationType());
if (settlementService == null) throw new UnsupportedOperationException("..message..");
settlementService.settleOperation(order);
}