状态模式(State Pattern)是对象行为模式的一种;它的意图是:允许一个对象在其内部状态改变的时改变它的行为。
主要角色有:
context(环境),State(抽象的状态角色),ConcreteState(真实的状态角色)
状态模式使用的场景:
- 一个对象的行为依赖于它所处于的状态,对象的行为必须随着其状态的改变而改变
- 对象在某个方法中依赖于一重或多重的条件转移语句,其中有大量的代码。状态模式把条件转移语句你的每一个分支都包装到一个独立的类中。使得这些条件转移语句能够以类的形式独立的存在和演进。
交通灯的状态有:红灯,黄灯和绿灯。
交通灯的状态是会改变的,所以抽象的状态有一个操作就是改变状态
/** * 状态机的接口 * @author zhangwei_david * @version $Id: RedState.java, v 0.1 2015年1月12日 下午8:34:04 zhangwei_david Exp $ */ public interface State { /** * 装填的装换 * * @return */ public State change(); }
/** *交通灯的状态机 * @author zhangwei_david * @version $Id: ColorState.java, v 0.1 2015年1月12日 下午8:35:55 zhangwei_david Exp $ */ public enum TrafficLightState implements State { RED { /** * @see com.cathy.demo.enumDemo.TrafficLightState#change() */ @Override public State change() { // 红灯转换为绿灯 return GREEN; } }, GREEN { /** * @see com.cathy.demo.enumDemo.TrafficLightState#change() */ @Override public State change() { // 绿灯转换为黄灯 return YELLOW; } }, YELLOW { /** * @see com.cathy.demo.enumDemo.TrafficLightState#change() */ @Override public State change() { // 黄灯转换为红灯 return RED; } }; /** * @see com.cathy.demo.enumDemo.State#change() */ public abstract State change(); }
/** * * @author zhangwei_david * @version $Id: Client.java, v 0.1 2015年1月12日 下午8:48:51 zhangwei_david Exp $ */ public class Client { /** * * @param args */ public static void main(String[] args) { State state = TrafficLightState.GREEN; state = state.change(); System.out.println(state); state = state.change(); System.out.println(state); state = state.change(); System.out.println(state); state = state.change(); System.out.println(state); state = state.change(); System.out.println(state); } } 结果是: YELLOW RED GREEN YELLOW RED