java 枚举策略模式
时间: 2024-06-15 10:02:05 浏览: 17
枚举策略模式(Strategy Pattern)是行为设计模式的一种,它允许你定义一系列算法,并将每个算法封装在独立的类中,然后将它们作为参数传递给一个共同的接口或抽象类。在Java中,枚举类型非常适合用来实现策略模式,因为枚举可以提供有限且预定义的选项。
Java枚举策略模式的实现通常包括以下几个步骤:
1. **接口或抽象类**:定义一个策略接口或抽象类,包含具体执行操作的方法。例如:
```java
public interface PaymentStrategy {
void processPayment(double amount);
}
```
2. **枚举类**:为每种策略创建一个枚举类,继承自策略接口或实现抽象类,并实现具体方法。比如:
```java
public enum PaymentMethod implements PaymentStrategy {
CASH("Cash", amount -> System.out.println("Processing cash payment...")),
DEBIT_CARD("Debit Card", amount -> System.out.println("Processing debit card payment..."));
private String name;
private Function<Double, Void> processPayment;
PaymentMethod(String name, Function<Double, Void> processPayment) {
this.name = name;
this.processPayment = processPayment;
}
@Override
public void processPayment(double amount) {
processPayment.apply(amount);
}
public String getName() {
return name;
}
}
```
3. **客户端使用**:在需要使用策略的地方,可以创建枚举类型的实例并调用其方法:
```java
public class PaymentProcessor {
private PaymentStrategy strategy;
public void setPaymentStrategy(PaymentStrategy strategy) {
this.strategy = strategy;
}
public void processPayment(double amount) {
strategy.processPayment(amount);
}
}
PaymentProcessor processor = new PaymentProcessor();
processor.setPaymentStrategy(PaymentMethod.CASH);
processor.processPayment(100.0);
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)