状态模式

作者: 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();//灯要跳转了
            }
        }
    }
    
    

    相关文章

      网友评论

        本文标题:状态模式

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