Java 设计模式-状态模式模式(State)

   状态模式(State Pattern)是对象行为模式的一种;它的意图是:允许一个对象在其内部状态改变的时改变它的行为。

    主要角色有:

      context(环境),State(抽象的状态角色),ConcreteState(真实的状态角色)

 状态模式使用的场景:

  1.   一个对象的行为依赖于它所处于的状态,对象的行为必须随着其状态的改变而改变
  2. 对象在某个方法中依赖于一重或多重的条件转移语句,其中有大量的代码。状态模式把条件转移语句你的每一个分支都包装到一个独立的类中。使得这些条件转移语句能够以类的形式独立的存在和演进。

 

交通灯的状态有:红灯,黄灯和绿灯。
交通灯的状态是会改变的,所以抽象的状态有一个操作就是改变状态

 

/**
 * 状态机的接口
 * @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

 

posted @ 2015-03-06 14:44  开心朵朵  阅读(345)  评论(0编辑  收藏  举报