• 无废话设计模式(14)行为型模式--状态模式


    0-前言

      状态模式定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类;

    1-实现

    1-1、简单UML图

    1-2、代码实现

    //1、状态抽象父类
    abstract  class State
    {
        public String StateName;
        public abstract void Handle(Contex contex);
    }
    
    //2-1、具体状态A
    class StateStop extends  State
    {
        public StateStop()
        {
            StateName = "停止状态";  //当前状态
        }
    
        @Override
        public void Handle(Contex contex)
        {
            contex.setState(new StateStart() ); //设置下一个状态
        }
    }
    
    //2-2、具体状态B
    class StateStart extends  State
    {
        public StateStart()
        {
            StateName = "开动状态"; //当前撞他
        }
    
        @Override
        public void Handle(Contex contex)
        {
            contex.setState(new StateStop()); //设置下一个状态
        }
    }
    
    //3、上下文类
    class  Contex
    {
        private  State state;
        public  Contex( State _state)
        {
            this.state = _state;
        }
    
        //1、设置状态
        public  void setState(State st)
        {
            System.out.println("************当前状态为:"+state.StateName);
            this.state = st;
            System.out.println("状态变更为:"+state.StateName);
        }
    
        //2、执行方法
        public void Request()
        {
            state.Handle(this);
        }

    客户端:

            Contex ct = new Contex(new StateStart());
            ct.Request();
            ct.Request();
            ct.Request();

    运行结果:

    2-应用场景简单总结

    1、当对象的行为取决于它的状态,且必须在运行时根据状态来改变自己的行为时;

    2、当一个操作对象含大量多分支条件语句,且这些分支依赖该对象的状态时;

  • 相关阅读:
    2020软件工程作业05
    一、uart&tty驱动
    柔性数组使用备忘
    指针和数组备忘
    计算信息帧的校验和(备忘)
    Linux系统vim几个常见配置
    C语言实现过滤ASCII在0~127范围内的字符,并去除重复的字符
    extern "C"的用法
    strtol详解
    将一个十进制整数转换为二进制并输出
  • 原文地址:https://www.cnblogs.com/yanghj/p/13428203.html
Copyright © 2020-2023  润新知