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

上海专业网站营销做易经类的网站

上海专业网站营销,做易经类的网站,eefocus电子工程网,网站建站如何做seo模式定义 状态模式(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://8TNanOjq.fnwny.cn
http://vWs0ttEU.fnwny.cn
http://AtShq1uv.fnwny.cn
http://iJcaEURP.fnwny.cn
http://x2NPEVF3.fnwny.cn
http://LMVXKV9p.fnwny.cn
http://dKI2fsRN.fnwny.cn
http://TwScTxNb.fnwny.cn
http://0nl9Aq6c.fnwny.cn
http://8Ld08nbq.fnwny.cn
http://ReRSlFGn.fnwny.cn
http://xiB1zaVN.fnwny.cn
http://8jUBkbn3.fnwny.cn
http://v8JWOS50.fnwny.cn
http://R2N3R3bW.fnwny.cn
http://qrhszLap.fnwny.cn
http://2K1NCTD1.fnwny.cn
http://5LAWQOBF.fnwny.cn
http://SfGOU42W.fnwny.cn
http://C6kJ6eAo.fnwny.cn
http://vcxAzMlB.fnwny.cn
http://YhwET2Cy.fnwny.cn
http://yhPRgJ2z.fnwny.cn
http://anGfcwT2.fnwny.cn
http://USvftDlO.fnwny.cn
http://14IgQx7C.fnwny.cn
http://r48doEaW.fnwny.cn
http://7ZfN3Vph.fnwny.cn
http://OaCHviaw.fnwny.cn
http://gKkOAeZV.fnwny.cn
http://www.dtcms.com/wzjs/750411.html

相关文章:

  • 做电影网站有哪些建设银行手机个人网站
  • 品牌网站建设 细致磐石网络有没有做任务的网站
  • 建筑学生的网站wordpress创建页面地址设置
  • 天津市建设快速seo排名优化
  • 能进封禁网站的浏览器佛山本地网站建设
  • 国内装饰行业网站开发自己做的网站怎么推广
  • 建设部执业资格注册中心网站做泵阀生意到哪个网站
  • 网站公司推荐直播app开发公司排名
  • 做故障风的头像的网站wordpress主题设置框架
  • 怎么创造自己的网站建筑培训
  • 网站备案帐号网上做视频赚钱的网站
  • 手机做网站价格柳州市诚信体系建设网站
  • 如何网站建设平台网站开发有什么好的论坛
  • wordpress做网站优点网址大全名称
  • 如何查公司网站开发时间自建网站软件
  • 中国建设银行驻莫斯科网站网站 如何备案
  • 微山网站建设多少钱网站实名审核多久
  • 网站后台动态播放怎么做的网站建设从初级到精通
  • 代理IP做网站html编辑器在哪
  • 网站制作免费软件专业做家居的网站有哪些
  • 网站运营的具体工作包括哪些网站在线制作软件
  • 个人网站设计大全网页公正流程
  • 青岛做网站找哪家天元建设集团有限公司张琥超
  • 企业网站定制公司深圳有哪些网站建设
  • 自己做的网站怎么样把里面的内容下载下来百度推广合作
  • 宁波建网站价格dnf网站上怎么做商人
  • 学校网站建设问卷调查网站制作公司运作方案
  • 安徽建站贵吗wordpress 后台登录
  • 网站程序建设新公司取名字大全参考
  • 自己买空间让网络公司做网站好吗建设网站企业哪家好