集合spring框架的是策略模式,直接上代码
1、接口
public interface PaymentStrategy {
//支付接口
void pay(double amount);
}
2、实现类
2.1 实现类一
@Component("creditCard") //作为区分的标识
public class CreditCardPayment implements PaymentStrategy {//实现接口
//重写的接口
@Override
public void pay(double amount) {
System.out.println("Paid " + amount + " using Credit Card.");
}
}
2.2 实现类一
@Component("creditCard") //作为区分的标识
public class PayPalPayment implements PaymentStrategy {//实现接口
//重写的接口
@Override
public void pay(double amount) {
System.out.println("Paid " + amount + " using PayPal.");
}
}
3、工厂方法
//工厂方法
@Component
public class PaymentStrategyFactory {
private final Map<String, PaymentStrategy> strategies;
//自动字数管理映射
@Autowired
public PaymentStrategyFactory(Map<String, PaymentStrategy> strategies) {
this.strategies = strategies;
}
//根据实现类的bean获取对应的实例
public PaymentStrategy getStrategy(String strategyName) {
return strategies.get(strategyName);
}
}
4、应用层
// 依赖注入
private final PaymentStrategyFactory paymentStrategyFactory;
@Autowired
public LocalTest(PaymentStrategyFactory paymentStrategyFactory) {
this.paymentStrategyFactory = paymentStrategyFactory;
}
@GetMapping("strategyTest")
public String strategyTest(@RequestParam(value = "method") String method,
@RequestParam(value = "amount") double amount) throws IOException {
//获取对应的实例
PaymentStrategy strategy = paymentStrategyFactory.getStrategy(method);
if (strategy == null) {
throw new RemoteException("Unknown payment method: "+method);
}
//运行
strategy.pay(amount);
return "Payment successful!";
}