springboot策略抽象父类
时间: 2025-04-24 22:14:03 浏览: 18
### 如何在 Spring Boot 中实现策略模式的抽象父类
在 Spring Boot 应用程序中应用策略模式时,可以创建一个抽象父类来封装通用逻辑并定义特定于子类的行为。这有助于减少重复代码,并使系统更易于维护和扩展。
#### 创建抽象父类
为了构建这种层次结构,首先需要定义一个接口或抽象类作为所有具体策略的基础:
```java
public abstract class AbstractPaymentStrategy {
protected String paymentType;
public AbstractPaymentStrategy(String paymentType) {
this.paymentType = paymentType;
}
// 定义公共行为的方法签名
public void pay(double amount){
System.out.println("Paying " + amount + " via " + getPaymentMethod());
}
// 将支付方式的具体实现交给子类处理
protected abstract String getPaymentMethod();
}
```
上述代码展示了 `AbstractPaymentStrategy` 类的设计[^3]。此类不仅包含了共享属性(如付款类型),还提供了一种机制让各个子类能够自定义其特有的业务逻辑——即不同的支付手段是如何被描述出来的。
#### 扩展抽象父类
接着可以通过继承此抽象类来创建具体的策略实现:
```java
// CreditCardPayment.java
public class CreditCardPayment extends AbstractPaymentStrategy {
public CreditCardPayment() {
super("Credit Card");
}
@Override
protected String getPaymentMethod(){
return "Credit card";
}
}
// PayPalPayment.java
public class PayPalPayment extends AbstractPaymentStrategy {
public PayPalPayment() {
super("PayPal");
}
@Override
protected String getPaymentMethod(){
return "PayPal account";
}
}
```
这些具体的策略实现了由父类声明但未完成的功能,从而形成了完整的解决方案链路[^4]。
#### 使用依赖注入选择合适的策略
最后,在实际的应用场景下,可以根据需求动态地决定采用哪种支付方式进行交易操作。借助 Spring 的依赖注入特性以及 `@Qualifier` 注解的帮助,可以在运行期间轻松切换不同类型的策略实例。
```java
@Service
public class PaymentService {
private final Map<String, AbstractPaymentStrategy> strategies;
@Autowired
public PaymentService(List<AbstractPaymentStrategy> strategyList) {
this.strategies = strategyList.stream()
.collect(Collectors.toMap(AbstractPaymentStrategy::getPaymentType, Function.identity()));
}
public void processPayment(String type, double amount){
Optional.ofNullable(strategies.get(type))
.ifPresent(strategy -> strategy.pay(amount));
}
}
```
这段服务层代码片段说明了如何注册所有的策略对象到容器里,并通过键值映射的方式快速检索所需的处理器执行相应的动作[^5]。
阅读全文
相关推荐












