小蔡学Java

Java之设计模式(七)

2023-09-17 17:56 1352 0 设计模式 设计模式

状态模式(State Pattern)

  Java 状态模式是一种行为设计模式,它允许对象在内部状态改变时改变它的行为。状态模式通过将状态封装成一个对象来实现这一点,从而使得一个对象的行为取决于它的状态对象,而不是取决于对象本身。

使用场景

  • 当一个对象的行为取决于它的状态,并且该对象的状态可能在运行时发生改变时,可以使用状态模式。

  • 当一个对象需要根据不同的状态采取不同的行动时,可以使用状态模式。

  • 当一个对象的代码中包含大量与状态相关的条件语句时,可以使用状态模式来简化代码。

代码实现

  假设有一个订单对象,订单状态包括 "新建"、"处理中" 和 "完成" 三种状态,订单状态会随着订单处理的不同而改变。   首先,我们需要定义订单状态的接口:

public interface OrderState {
    void processOrder(Order order);
}

然后,我们定义订单状态的具体实现类,分别对应三种不同的状态

public class NewOrder implements OrderState {
    public void processOrder(Order order) {
        // 处理新建状态下的订单
        System.out.println("Processing new order.");
        order.setState(new ProcessingOrder());
    }
}
public class ProcessingOrder implements OrderState {
    public void processOrder(Order order) {
        // 处理处理中状态下的订单
        System.out.println("Processing order in progress.");
        order.setState(new CompletedOrder());
    }
}
public class CompletedOrder implements OrderState {
    public void processOrder(Order order) {
        // 处理完成状态下的订单
        System.out.println("Processing completed order.");
    }
}

  最后,我们定义订单对象,并在订单对象中实现状态的切换:

public class Order {
    private OrderState state;

    public Order() {
        state = new NewOrder();
    }

    public void setState(OrderState state) {
        this.state = state;
    }

    public void processOrder() {
        state.processOrder(this);
    }
}

  使用上面定义的订单对象和订单状态对象来处理订单了:

  
Order order = new Order();
order.processOrder();    // Output: Processing new order.
order.processOrder();    // Output: Processing order in progress.
order.processOrder();    // Output: Processing completed order.

使用了状态模式来实现订单对象的状态转换,可以动态地改变订单对象的状态,并且无需修改订单对象本身的代码。使代码更加灵活和易于维护。

使用小结

  状态模式在 Java 中的应用非常广泛,比如,线程池也是一个常见的状态机。通过使用状态模式,我们可以轻松地管理线程池的状态,并实现线程池状态的动态变更。

评论( 0 )

  • 博主 Mr Cai
  • 坐标 河南 信阳
  • 标签 Java、SpringBoot、消息中间件、Web、Code爱好者

文章目录