• 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
    
  • 相关阅读:
    mvc页面中,显示自定义时间格式
    时间格式字符串中,大小写字母的解释
    subversion SVN global ignore pattern
    .net项目svn项目管理文件清单
    nopcommerce插件相关
    vs2013执行Add-Migration出现的问题
    jquery为多个元素添加事件
    在JavaScript中创建命名空间的几种写法
    Python 创建XML 的三种方式
    Python 对网页操作的方法, urllib ;requests
  • 原文地址:https://www.cnblogs.com/wei-zw/p/8797787.html
Copyright © 2020-2023  润新知