当前位置: 首页 > wzjs >正文

上海做网站找哪个公司好济南润尔网站建设技术公司

上海做网站找哪个公司好,济南润尔网站建设技术公司,高清logo设计公司,wordpress更换端口模式定义 状态模式(State Pattern) 允许对象在其内部状态改变时改变它的行为,使对象看起来像是修改了它的类。属于行为型设计模式,核心思想是将状态抽象为独立对象,不同状态下行为封装在不同状态类中。 解决的问题 …

模式定义

状态模式(State Pattern) 允许对象在其内部状态改变时改变它的行为,使对象看起来像是修改了它的类。属于行为型设计模式,核心思想是将状态抽象为独立对象,不同状态下行为封装在不同状态类中。

解决的问题

消除庞大的条件分支

避免对象在不同状态下使用大量if-else或switch-case判断状态

状态转换逻辑清晰化

将状态转移规则封装在状态对象中

提高扩展性

新增状态时只需添加新状态类,无需修改现有代码

真实场景案例:电商订单状态流转

需求背景

电商订单存在多种状态:
待支付 → 已支付 → 已发货 → 已收货 → 已完成
每个状态下可执行的操作不同:
待支付状态:允许支付、取消订单
已支付状态:允许发货、退款
已发货状态:允许确认收货
已收货状态:允许完成订单
已完成/已取消状态:不可再操作

代码实现

1. 定义状态接口

// 订单状态接口
public interface OrderState {void pay(OrderContext context);      // 支付void cancel(OrderContext context);   // 取消void ship(OrderContext context);     // 发货void receive(OrderContext context);  // 收货void complete(OrderContext context); // 完成
}

2. 实现具体状态类

待支付状态

public class UnpaidState implements OrderState {@Overridepublic void pay(OrderContext context) {System.out.println("支付成功");context.setState(new PaidState());}@Overridepublic void cancel(OrderContext context) {System.out.println("订单已取消");context.setState(new CancelledState());}// 其他操作不支持@Overridepublic void ship(OrderContext context) {throw new UnsupportedOperationException("待支付状态不能发货");}@Overridepublic void receive(OrderContext context) {throw new UnsupportedOperationException("非法操作");}@Overridepublic void complete(OrderContext context) {throw new UnsupportedOperationException("非法操作");}
}

已支付状态

public class PaidState implements OrderState {@Overridepublic void ship(OrderContext context) {System.out.println("商品已发货");context.setState(new ShippedState());}@Overridepublic void cancel(OrderContext context) {System.out.println("发起退款流程");context.setState(new CancelledState());}// 其他操作处理@Overridepublic void pay(OrderContext context) {throw new UnsupportedOperationException("已支付状态不能重复支付");}// ... 类似处理其他不支持操作
}

其他状态类(已发货、已收货、已完成、已取消)实现方式类似,此处省略。

3. 定义订单上下文

public class OrderContext {private OrderState currentState;public OrderContext() {this.currentState = new UnpaidState(); // 初始状态}public void setState(OrderState state) {this.currentState = state;}// 委托操作给当前状态public void pay() { currentState.pay(this); }public void cancel() { currentState.cancel(this); }public void ship() { currentState.ship(this); }public void receive() { currentState.receive(this); }public void complete() { currentState.complete(this); }
}

4. 客户端使用

public class Client {public static void main(String[] args) {OrderContext order = new OrderContext();order.pay();       // 正常支付order.ship();       // 正常发货order.receive();    // 正常收货order.complete();   // 完成订单try {order.ship();   // 尝试非法操作} catch (Exception e) {System.out.println("操作失败: " + e.getMessage());}}
}

输出结果
复制
支付成功
商品已发货
确认收货成功
订单已完成
操作失败: 已完成状态不能发货

模式优势

优势传统条件分支实现状态模式实现
可维护性修改状态逻辑需改动大量条件判断只需修改对应状态类
可扩展性新增状态需修改所有相关方法新增状态类即可
代码清晰度一个方法包含所有状态逻辑每个状态逻辑独立封装
单一职责违反单一职责原则每个状态类职责明确

实际应用场景

工作流引擎
审批流程中的不同状态(起草、审批中、已通过、被驳回)
游戏开发
角色状态(站立、移动、攻击、死亡)
硬件控制
电梯运行状态(停止、运行、故障)
UI交互
按钮的不同状态(正常、禁用、悬停、点击)

通过状态模式,我们实现了:
✅ 消除复杂的条件判断
✅ 状态转换逻辑内聚到状态类中
✅ 符合开闭原则(新增状态无需修改现有代码)
✅ 更易维护的清晰代码结构

一句话总结

状态模式就是将状态都独立出来,将状态与实际业务解耦。相对于策略模式,状态与状态之间有联系,策略与策略之间是独立的。


文章转载自:

http://IPh0CwUd.Lxqyf.cn
http://FIzljyZ5.Lxqyf.cn
http://zJcg29gC.Lxqyf.cn
http://38ObY6LT.Lxqyf.cn
http://8FQQs9LG.Lxqyf.cn
http://mY5WaU22.Lxqyf.cn
http://vZt2eRK4.Lxqyf.cn
http://o8PFkvVo.Lxqyf.cn
http://P83N7FEV.Lxqyf.cn
http://chmdZb89.Lxqyf.cn
http://e2WaldLj.Lxqyf.cn
http://3yGvTJhx.Lxqyf.cn
http://atxl5D08.Lxqyf.cn
http://5vNKezhU.Lxqyf.cn
http://iNJcQh90.Lxqyf.cn
http://GI6otKJk.Lxqyf.cn
http://3l7WPVuX.Lxqyf.cn
http://VxkLXfOX.Lxqyf.cn
http://dXX8F0Wv.Lxqyf.cn
http://t8B1icpX.Lxqyf.cn
http://LY3B3vMf.Lxqyf.cn
http://WVERlUQA.Lxqyf.cn
http://btKj3JB7.Lxqyf.cn
http://K9Ut2zh0.Lxqyf.cn
http://IUX3szYN.Lxqyf.cn
http://PGVjV7jl.Lxqyf.cn
http://jqlVd0wU.Lxqyf.cn
http://icoCVXYK.Lxqyf.cn
http://RbfO68XY.Lxqyf.cn
http://X2cXdvsM.Lxqyf.cn
http://www.dtcms.com/wzjs/658642.html

相关文章:

  • 义乌搭建网站wordpress菜单跳出
  • 网站域名是什么东西汽车网站模板下载
  • 网站开发盈利好看简洁的logo
  • 网站的设计 哪家网络公司好做类似交易猫的网站
  • 郑州网站建设推广有限公司网题 做问卷的网站
  • 思茅北京网站建设PHP网站开发都需要学什么
  • 亚马逊欧洲站入口网址网站affiliate怎么做
  • 公司内部网站设计网站开发形式
  • 微网站在哪制作的为什么不建议去外包公司上班
  • dedecms 调用 另一个网站邢台发广告的平台有哪些
  • 网站建设现状网页设计论文结论
  • 建个人网站需要哪些婚纱摄影的网站怎么做
  • 微网站和网站同步像素呼和浩特网站建设哪家最便宜
  • 外贸在什么网站做wordpress的ping
  • 网站前端浏览器兼容如何做网络设计具体学哪些
  • 电子网站建设怎么做静态网站开发预期效果
  • 深圳网站建公司php网站建设全程实例
  • 中英语网站制作方法网站设计大作业
  • 网站建设公司哪家好 都来磐石网络wordpress4.7.3
  • 网站攻击一般有那些一二三四高清视频免费观看
  • 泉州做网站排名几十张照片合成视频
  • 发布网站需要多大空间怎么样做国外推广网站
  • 自学网站搭建怎么查询网站的空间商
  • php网站伪静态广州手机网站案例
  • 个人做公司网站百度做网站 推广费用怎么收
  • 手机百度怎么解除禁止访问网站ppt素材模板免费下载
  • 天津网站建设学习网站和app可以做充值余额功能
  • 万维网网站服务的名称黄冈地区免费网站推广平台
  • 专门做奢侈品的网站有哪些动漫制作和动漫设计哪个好
  • 网站平台开通微信支付海口手机版网站建设