小A:“状态模式的实质是什么?”
大B:“使用状态模式前,客户端外界需要介入改变状态,而状态改变的实现是琐碎或复杂的。使用状态模式后,客户端外界可以直接使用事件Event实现,根本不必关心该事件导致如何状态变化,这些是由状态机等内部实现。这是一种Event-condition-State,状态模式封装了condition-State部分。每个状态形成一个子类,每个状态只关心它的下一个可能状态,从而无形中形成了状态转换的规则。如果新的状态加入,只涉及它的前一个状态修改和定义。”
小A:“都有些什么方法实现状态转换?”
大B:“一个在每个状态实现next(),指定下一个状态;还有一种方法,设定一个StateOwner,在StateOwner设定stateEnter状态进入和stateExit状态退出行为。状态从一个方面说明了流程,流程是随时间而改变,状态是截取流程某个时间片。”