📜  如何在Java使用 Enum 实现策略模式?(1)

📅  最后修改于: 2023-12-03 15:24:32.958000             🧑  作者: Mango

如何在Java使用 Enum 实现策略模式?

简介

策略模式是一种行为型设计模式,它允许在运行时根据需要改变一个类的算法。这种模式将不同的算法封装在独立的类中,使得它们之间可以互换,从而实现了算法的灵活性。

在 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 中,我们可以使用枚举类型来实现策略模式。