设计模式——状态模式
我们项目组有一个业务代码足足有600行,我当时就认为这段代码为垃圾代码。在重构一书中写过“一个很重要的代码坏味道,就是 long method,方法如果过长极有可能是有坏味道了”。但是对于业务代码可以使用oop 的三件套 封装 继承 多态。在这段代码中根本没有看到这三样。面向对象设计其实就是希望做到代码的责任分解。但是这个类违背了单一职责原则我们该怎么做。
比如说 电商的抢货,下订单(状态:0,冻结库存)——支付(状态:1,收款)——发货(状态:2,扣减库存)——收货(状态:3,订单完成) 取消状态则根据当前状态逆向流程进行处理。这种模式十分适合状态模式;
什么是状态模式:
- 状态模式主要解决当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的状态简单化。
state 抽象类定义一个 抽象handle的实现。
ContextState状态类每一个子类都实现状态行为。
Context 当前实例的状态。
输出: 不断的请求,并更新状态。
状态模式的好处与作用:
与相关的行为局部化,将不同的状态实现分隔开。
状态模式是把不同的状态转移逻辑分布到不同的state的子类之间,减少它们之间的依赖。