📅  最后修改于: 2023-12-03 15:24:32.958000             🧑  作者: Mango
策略模式是一种行为型设计模式,它允许在运行时根据需要改变一个类的算法。这种模式将不同的算法封装在独立的类中,使得它们之间可以互换,从而实现了算法的灵活性。
在 Java 中,我们可以使用 Enum 类型实现策略模式。这种方式可以更好地支持类型安全和编译时错误检查。
本文将介绍如何在 Java 中使用 Enum 实现策略模式。
我们假设有一个电子商务网站,它需要根据不同的订单类型计算每个订单的费用。订单有三种类型:VIP、普通和团购。每个订单类型的计算规则有所不同,因此我们需要实现不同的算法。
首先,我们定义一个 Order 类,它包含订单的类型和金额:
public class Order {
private OrderType type;
private double amount;
public Order(OrderType type, double amount) {
this.type = type;
this.amount = amount;
}
public double calculatePrice() {
return type.calculatePrice(amount);
}
}
然后,我们定义一个 OrderType 接口,它包含一个用于计算订单费用的方法:
public interface OrderType {
double calculatePrice(double amount);
}
接下来,我们定义三个实现 OrderType 接口的枚举类型:VIP、普通和团购。每个枚举类型实现了自己的计算规则:
public enum VIP implements OrderType {
INSTANCE;
@Override
public double calculatePrice(double amount) {
return amount * 0.8;
}
}
public enum Normal implements OrderType {
INSTANCE;
@Override
public double calculatePrice(double amount) {
return amount;
}
}
public enum Group implements OrderType {
INSTANCE;
@Override
public double calculatePrice(double amount) {
return amount * 0.9;
}
}
最后,我们可以使用这些枚举类型来计算订单的费用:
public static void main(String[] args) {
Order vipOrder = new Order(VIP.INSTANCE, 100.0);
Order normalOrder = new Order(Normal.INSTANCE, 100.0);
Order groupOrder = new Order(Group.INSTANCE, 100.0);
System.out.println("VIP 订单价格为:" + vipOrder.calculatePrice());
System.out.println("普通订单价格为:" + normalOrder.calculatePrice());
System.out.println("团购订单价格为:" + groupOrder.calculatePrice());
}
输出结果为:
VIP 订单价格为:80.0
普通订单价格为:100.0
团购订单价格为:90.0
使用 Enum 实现策略模式可以更好地支持类型安全和编译时错误检查。这种方式还可以使代码更简洁清晰。在 Java 中,我们可以使用枚举类型来实现策略模式。