State 状态模式可以基于一个对象的同种事务而封装出不同的行为
它提供一种简洁的方式使得对象在运行时可以改变自身行为,而不必借助单一庞大的条件判断语句
以前在做一个商城中的订单时,设计的订单类大致意思如下:
1 | class Order |
单独状态单独处理,手动设置状态,非常僵硬:
1 | $order = new Order(); |
下面用状态模式替代,已付款状态的例子:
State 接口规定了
doAction(Order $order)
1 | class PayState implements State |
原来的订单类中需要加上新属性: $currentState,存放当前状态
而原来的 $state 属性存放的就不是值了,而是一个状态对象:
1 | class Order |