简单三步:Fun-ASR多语言语音识别模型部署与调用教程
2026/4/21 13:06:15
状态模式是一种行为型设计模式,它允许你在对象的内部状态改变时改变它的行为。对象看起来好像改变了它的类。
简单来说:状态模式就是让对象在不同状态下有不同的行为。
想象一下:
// 使用if-else处理状态if(state=="待支付"){// 待支付逻辑}elseif(state=="已支付"){// 已支付逻辑}elseif(state=="已发货"){// 已发货逻辑}问题:
// 使用状态模式state.handle();优势:
┌─────────────────────┐ │ State │ 状态接口 ├─────────────────────┤ │ + handle(): void │ └──────────┬──────────┘ │ 实现 ├──┬──────────────────┬──────────────┐ │ │ │ ┌──────────┴──────┐ ┌───────────┴───────┐ ┌───┴────────┐ │ ConcreteState1 │ │ ConcreteState2 │ │ ... │ 具体状态 ├─────────────────┤ ├───────────────────┤ ├────────────┤ │ + handle() │ │ + handle() │ │ │ └─────────────────┘ └───────────────────┘ └────────────┘ ┌─────────────────────┐ │ Context │ 上下文 ├─────────────────────┤ │ - state: State │ │ + setState(): void │ │ + request(): void │ └─────────────────────┘/** * 状态接口 */publicinterfaceState{/** * 处理请求 */voidhandle();}/** * 具体状态:待支付状态 */publicclassPendingPaymentStateimplementsState{@Overridepublicvoidhandle(){System.out.println("订单状态:待支付,等待用户支付");}}/** * 具体状态:已支付状态 */publicclassPaidStateimplementsState{@Overridepublicvoidhandle(){System.out.println("订单状态:已支付,等待发货");}}/** * 具体状态:已发货状态 */publicclassShippedStateimplementsState{@Overridepublicvoidhandle(){System.out.println("订单状态:已发货,等待收货");}}/** * 具体状态:已完成状态 */publicclassCompletedStateimplementsState{@Overridepublicvoidhandle(){System.out.println("订单状态:已完成");}}/** * 上下文:订单 */publicclassOrder{privateStatestate;publicOrder(){this.state=newPendingPaymentState();}publicvoidsetState(Statestate){this.state=state;}publicvoidrequest(){state.handle();}}/** * 状态模式测试类 * 演示如何使用状态模式管理订单状态 */publicclassStateTest{publicstaticvoidmain(String[]args){System.out.println("=== 状态模式测试 ===\n");// 创建订单Orderorder=newOrder();// 测试不同状态System.out.println("--- 待支付状态 ---");order.request();System.out.println("\n--- 已支付状态 ---");order.setState(newPaidState());order.request();System.out.println("\n--- 已发货状态 ---");order.setState(newShippedState());order.request();System.out.println("\n--- 已完成状态 ---");order.setState(newCompletedState());order.request();System.out.println("\n=== 状态模式的优势 ===");System.out.println("1. 清晰分离:每个状态的行为清晰分离");System.out.println("2. 易于扩展:新增状态很容易");System.out.println("3. 易于维护:状态逻辑集中管理");System.out.println("4. 避免条件语句:避免大量if-else");System.out.println("\n=== 实际应用场景 ===");System.out.println("1. 订单系统:订单状态管理");System.out.println("2. 游戏开发:角色状态管理");System.out.println("3. 工作流:工作流状态管理");System.out.println("4. 交通灯:交通灯状态管理");System.out.println("\n=== 与策略模式的区别 ===");System.out.println("状态模式:对象在不同状态下有不同的行为");System.out.println("策略模式:对象在不同策略下有不同的行为");System.out.println("状态模式:状态之间有转换关系");System.out.println("策略模式:策略之间没有转换关系");}}⚠️ 状态模式虽然有用,但要注意: