状态模式把研究对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的子类。 状态模式的意图是让一个对象在其内部状态发生变化的时候其行为也随之改变。 模式涉及的角色有: 1、抽象状态:定义一个接口封装环境对象的一个特定状态所对应的行为。 2、具体状态:每一个具体状态类都实现了环境的一个状态所对应的行为。 3、环境角色:定义客户端感兴趣的接口,并且保留一个具体状态类的实例这个实例给出此环境对象的现有状态。
在什么情况下使用状态模式 1、对象的行为依赖于它所处的状态 2、对象在某个方法里依赖于一重或多重的条件转移语句,其中有大量的条件判断代码。
状态模式实现的讨论 1、状态模式并没有规定哪个角色决定状态发生转换的条件如果转换条件是固定的则状态转换由Context来做 2、但是如果由State子类自己来决定下一继任者是谁则系统将更有灵活性。 3、或者由外界事件来决定状态的转变。 状态对象的创建 1、需要的时候创建,使用完毕立即消去。 2、事先创建所有的状态对象。