public abstract class State{
public abstract void handlepush(Context c);
public abstract void handlepull(Context c);
public abstract void getcolor();
}
上述代码中确实是包含两个基本方法:
1. 封装状态转换规则(转换到下一个状态规则)
2. 当前状态
handlepush和handlepull封装的是转换到上一个或下一个状态,叶就是封装状态转换规则。
getColor是获得当前状态。
关于老外那个例子,也差不多:
stateExit和stateEnter表示状态进入或退出,这是StateOwner 这个主动对象完成的。
重点是:围绕当前状态,把当前状态前后转换规则封装起来,打个比喻:幼儿园小孩排队,每个小孩(状态)只要记住自己前面一个和后面一个是谁就可以了,这是一个最简单有效的处理方式,当有新的小朋友(新的状态)插入时,它只要指定插入哪个小朋友后面就可以,而原来跟在那个小朋友之后的小朋友只要更改为跟在这个新小朋友后面就可以,这样新状态加入只涉及原来状态链中一个状态的修改,减少因为状态动态变化导致的修改范围。