MST

星途 面试题库

面试题:Java枚举与switch结合下的复杂业务逻辑实现

假设有一个表示订单状态的枚举类型,如CREATED(已创建)、PAID(已支付)、SHIPPED(已发货)、DELIVERED(已交付)、CANCELED(已取消)。要求使用switch语句,根据不同的订单状态执行复杂的业务逻辑,例如:当订单状态为PAID时,更新库存并发送发货通知;当订单状态为DELIVERED时,更新用户积分并标记订单完成。请编写完整的Java代码实现该功能,并解释代码设计思路。
30.4万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
public class OrderStatusProcessor {
    public void processOrderStatus(OrderStatus status) {
        switch (status) {
            case CREATED:
                // 这里可以处理已创建状态的业务逻辑,比如记录日志等
                System.out.println("订单已创建,暂不执行其他复杂逻辑");
                break;
            case PAID:
                updateInventory();
                sendShippingNotification();
                break;
            case SHIPPED:
                // 这里可以处理已发货状态的业务逻辑,比如更新物流信息等
                System.out.println("订单已发货,暂不执行其他复杂逻辑");
                break;
            case DELIVERED:
                updateUserPoints();
                markOrderCompleted();
                break;
            case CANCELED:
                // 这里可以处理已取消状态的业务逻辑,比如退还库存等
                System.out.println("订单已取消,暂不执行其他复杂逻辑");
                break;
            default:
                System.out.println("未知的订单状态");
        }
    }

    private void updateInventory() {
        System.out.println("更新库存逻辑执行");
    }

    private void sendShippingNotification() {
        System.out.println("发送发货通知逻辑执行");
    }

    private void updateUserPoints() {
        System.out.println("更新用户积分逻辑执行");
    }

    private void markOrderCompleted() {
        System.out.println("标记订单完成逻辑执行");
    }
}

enum OrderStatus {
    CREATED, PAID, SHIPPED, DELIVERED, CANCELED
}

代码设计思路

  1. 定义枚举类型:首先定义了OrderStatus枚举类型,包含CREATEDPAIDSHIPPEDDELIVEREDCANCELED这几种订单状态。
  2. 定义处理类OrderStatusProcessor类用于处理不同订单状态的业务逻辑。
  3. processOrderStatus方法:该方法接收一个OrderStatus类型的参数,通过switch语句判断订单状态,并执行相应的业务逻辑。
    • 对于每个状态分支,调用特定的私有方法来完成具体的业务操作,如updateInventory更新库存,sendShippingNotification发送发货通知等。这样使得代码结构清晰,易于维护和扩展。
    • 对于每个状态分支,如果当前状态没有复杂业务逻辑,则简单打印提示信息。
    • default分支用于处理未知的订单状态,同样打印提示信息。
  4. 私有方法:定义了updateInventorysendShippingNotificationupdateUserPointsmarkOrderCompleted这些私有方法,在实际应用中,这些方法会包含具体的业务实现,这里只是简单打印提示信息表示逻辑执行。