自学搭建网站,wordpress无法连接ftf服务器,东莞人才市场最新招聘信息,如何建微信商城网站参考【设计模式】用Java实现状态模式_java 状态模式_卷帘的博客-CSDN博客
一、介绍#xff1a;
1、状态模式#xff1a;是一种行为设计模式#xff0c;它允许对象在内部状态发生改变时改变其行为。该模式将对象的行为包装在不同的状态类中#xff0c;使得对象的行为可以根…参考【设计模式】用Java实现状态模式_java 状态模式_卷帘的博客-CSDN博客
一、介绍
1、状态模式是一种行为设计模式它允许对象在内部状态发生改变时改变其行为。该模式将对象的行为包装在不同的状态类中使得对象的行为可以根据其当前状态动态改变。
2、组成状态模式的核心思想是通过将对象的行为包装在不同的状态类中使得对象可以根据其当前状态来改变行为而不需要使用大量的条件判断语句。通常由以下几个角色组成
1环境类Context环境类是拥有状态的对象它将会根据当前状态来执行相应的行为。它维护了一个对抽象状态类的引用用于切换和委托不同的状态处理。
2抽象状态类State抽象状态类定义了一个接口用于具体状态类的实现。在该接口中声明了具体状态类需要实现的方法。
3具体状态类Concrete State具体状态类实现了抽象状态类的接口并负责定义该状态下的具体行为。它包含了对环境类的引用可以根据需要切换环境类的状态。
3、UML类图 4、适用场景
1当一个对象的行为取决于其内部状态并且需要在运行时根据状态改变行为时状态模式非常有用。它允许对象在不同状态下执行不同的操作而不需要使用复杂的条件判断语句。
2当对象具有大量的状态以及与每个状态相关的行为时状态模式可以提供一种结构化的方式来管理和组织这些状态和行为。每个状态都可以表示为一个独立的状态类使得代码更加清晰、可读性更高。
3当需要向对象的状态变化进行动态扩展时状态模式提供了一种灵活的解决方案。通过添加新的状态类并相应地调整环境类与状态类之间的关联可以轻松地增加新的状态和行为。
4当多个对象需要共享同一组状态时状态模式可以减少重复代码的编写。通过将状态封装在独立的状态类中多个对象可以共享相同的状态实例从而节省内存和代码维护成本。
二、demo
1、电商订单状态流转
1环境类
// 环境类 - 订单
class Order {private OrderState state;public Order() {state new NewState();}public void setState(OrderState state) {this.state state;}public void process() {state.processOrder(this);}
}
2抽象状态类
// 抽象状态类
interface OrderState {void processOrder(Order order);
}
3具体状态类
// 具体状态类 - 新订单
class NewState implements OrderState {public void processOrder(Order order) {System.out.println(Processing new order);// 在新订单状态下的处理逻辑// ...order.setState(new ShippedState()); // 切换状态}
}// 具体状态类 - 已发货订单
class ShippedState implements OrderState {public void processOrder(Order order) {System.out.println(Processing shipped order);// 在已发货订单状态下的处理逻辑// ...order.setState(new DeliveredState()); // 切换状态}
}// 具体状态类 - 已交付订单
class DeliveredState implements OrderState {public void processOrder(Order order) {System.out.println(Processing delivered order);// 在已交付订单状态下的处理逻辑// ...}
}
4使用示例
public class Main {public static void main(String[] args) {Order order new Order();order.process(); // 处理新订单order.process(); // 处理已发货订单order.process(); // 处理已交付订单}
}