状态模式

作者: Stephenwish | 来源:发表于2020-08-03 21:07 被阅读0次
状态模式,定义:类内部变量(变化了)导致相关类的方法也会发生相关变化

写的时候记住口诀,状态》实现状态》持有状态

public abstract class State {
   protected Context context;//为了实现状态切换,你不切换就不写了
    abstract void handle();
    abstract void nextState();

    public Context getContext() {
        return context;
    }

    public void setContext(Context context) {
        this.context = context;
    }
}
public class RedState extends State {


    @Override
    public void handle() {
        System.err.println("红灯停车");
    }

    @Override
    void nextState() {
        context.setCurrentState(Context.GREEN_STATE);//红灯之后是绿灯
        System.err.println("设置Green");
    }
}

public class YellowState extends State{


    @Override
    public void handle() {
        System.err.println("黄灯等一等");
    }

    @Override
    void nextState() {
        context.setCurrentState(Context.RED_STATE);//黄灯之后是红灯
        System.err.println("设置Red");
    }
}


public class GreenState extends State {



    @Override
    public void handle() {
        System.err.println("绿灯通行");
    }

    @Override
    void nextState() {
        context.setCurrentState(Context.YELLOW_STATE);//绿灯之后是黄灯
        System.err.println("设置yellow");
    }
}
环境持有状态

public class Context {
    //罗列所有状态
    public static final RedState RED_STATE = new RedState();
    public static final GreenState GREEN_STATE = new GreenState();
    public static final YellowState YELLOW_STATE = new YellowState();
    private State currentState;//当前状态

    public State getCurrentState() {
        return currentState;
    }

    public void setCurrentState(State currentState) {
        this.currentState = currentState;
        this.currentState.setContext(this);
    }

    public void doSomthing(){
        currentState.handle();//不同的状态,导致处理方法不一样,多态原生也可以实现的
    }

    //这个是额外的方法,实现状态变化
    public void nextState(){
        currentState.nextState();
    }




}
最后设置测试类测试

public class Client {
    public static void main(String[] args) {
        Context context = new Context();
        context.setCurrentState(new GreenState());
        context.doSomthing();//什么灯做什么事
        context.nextState();//灯要跳转了
        for (int i = 0; i < 5; i++) {
            context.doSomthing();//什么灯做什么事
            context.nextState();//灯要跳转了
        }
    }
}

相关文章

  • State模式

    状态模式(State模式) 定义 状态模式,又称状态对象模式(Pattern of Objects for S...

  • 设计模式-状态模式

    设计模式-状态模式 设计模式 状态模式的关键是区分事物内部的状态

  • 状态模式(状态机模式)

    状态模式学习笔记 前言:文章从三方面简单阐述状态模式:是什么、为什么、如何做。这是我在工作之余自己的一些理解、思考...

  • C++设计模式(3)

    本文预览: 状态模式 组合模式 迭代器 职责链 命令 状态模式 定义:状态模式(State Pattern),允许...

  • 设计模式——状态模式

    定义 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行...

  • 第5章 -行为型模式-状态模式

    一、状态模式的简介 二、状态模式的优缺点 三、状态模式的实例

  • 状态模式

    Android进阶之设计模式 状态模式 定义: 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了...

  • 状态模式

    状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。允许对象随着状态改变而改变行为。 策略...

  • 状态模式

    《大话设计模式》阅读笔记和总结。原书是C#编写的,本人用Java实现了一遍,包括每种设计模式的UML图实现和示例代...

  • 状态模式

    状态模式 一个对象有状态变化 每次状态变化都会触发一个逻辑 不能总是用 if...else 来控制 示例 交通灯信...

网友评论

    本文标题:状态模式

    本文链接:https://www.haomeiwen.com/subject/olxbrktx.html