在介绍状态模式之前,我们先看个简单的例子
比如我们正常的网上购物的订单,对于订单它有许多个不同的状态,在不同状态下会有不同的行为能力,如状态有待支付、已支付待发货、待收货、订单完成等等,在整个订单流转过程中,由不同的事件行为导致它状态的变更,可以看下它简单的状态图
这些状态虽然不同,但是都是属于订单的状态,对应的行为也是订单的行为,在编码的过程中,一种写法是将这些行为(方法)都写到订单这个类或者类似OrderService这种类中,如
1 | public class OrderService { |
这样每次进行操作时,我们要先进行一下当前状态的判断,如用户支付时,我们要判断一下当前订单的状态,如果是待支付,则进行支付操作后,将状态改为已支付;如果当前状态是已支付时,就要提示用户当前订单已支付,不能再次支付等等,如果订单状态比较复杂时就会导致这个类中充斥大量的if
、switch
等判断逻辑,维护不便
而状态模式则提供了另一种解决方案,它将与特定状态相关的行为局部化,也使得状态转换现实化,下面我我们来具体看一下