zoukankan      html  css  js  c++  java
  • 状态模式

    package com.design;
    
    /** 状态模式 如果使用 if ... else if(){}else if(){}超过三层建议使用
     * Created by nicknailo on 2018/6/30.
     */
    public class StatePattern {
    
        public static void main(String[] args) {
            Work work = new Work();
            work.setHour( 9 );
            work.writeProgram();
    
            System.out.println("------------------");
            work.setHour( 10 );
            work.writeProgram();
            System.out.println("------------------");
            work.setHour( 12 );
            work.writeProgram();
            System.out.println("------------------");
            work.setHour( 13 );
            work.writeProgram();
            System.out.println("------------------");
            work.setHour( 14 );
            work.writeProgram();
            System.out.println("------------------");
            work.setHour( 17 );
            work.writeProgram();
    //        work.setFinished( true );
            work.setFinished( false );
            System.out.println("------------------");
            work.writeProgram();
            work.setHour( 19 );
            work.writeProgram();
            work.setHour( 22 );
            work.writeProgram();
        }
    
    
    }
    
    interface State{
        void writeProgram(Work w);
    }
    
    class ForenoonState implements State{
        @Override
        public void writeProgram(Work w) {
            if(w.getHour() < 12){
                System.out.println("当前时间 + "+ w.getHour()  +"点 上午工作,精神百倍  ");
            }else{
                w.setState( new NoonState() );
                w.writeProgram();
            }
        }
    }
    
    class NoonState implements State{
        @Override
        public void writeProgram(Work w) {
            if(w.getHour() < 13){
                System.out.println("当前时间 + "+ w.getHour()  +"点 饿了,午饭,犯困 午休  ");
            }else {
                w.setState( new AfternoonState() );
                w.writeProgram();
            }
        }
    }
    
    class AfternoonState implements State{
        @Override
        public void writeProgram(Work w) {
            if(w.getHour() < 17){
                System.out.println("当前时间 + "+ w.getHour()  +"点 下午工作,状态还不错,继续努力  ");
            }else {
                w.setState( new EveningState() );
                w.writeProgram();
            }
        }
    }
    
    class EveningState implements State{
        @Override
        public void writeProgram(Work w) {
            if(w.isFinished()){
                w.setState( new RestState() );
                w.writeProgram();
            }else{
                if(w.getHour() < 21){
                    System.out.println("当前时间 + "+ w.getHour()  +"点 加班哦,疲惫至极  ");
                }else {
                    w.setState( new SleepingState() );
                    w.writeProgram();
                }
            }
    
        }
    }
    
    class SleepingState implements State{
        @Override
        public void writeProgram(Work w) {
                System.out.println("当前时间 + "+ w.getHour()  +"点 不行了,要睡觉  ");
        }
    }
    
    class RestState implements State{
        @Override
        public void writeProgram(Work w) {
                System.out.println("当前时间 + "+ w.getHour()  +"点 下班回家了  ");
        }
    }
    
    class Work{
        private State state;
    
        public Work() {
            this.state = new ForenoonState();
        }
    
        private double hour;
        private boolean finished = false;
    
        public State getState() {
            return state;
        }
    
        public void setState(State state) {
            this.state = state;
        }
    
        public boolean isFinished() {
            return finished;
        }
    
        public void setFinished(boolean finished) {
            this.finished = finished;
        }
    
        public double getHour() {
            return hour;
        }
    
        public void setHour(double hour) {
            this.hour = hour;
        }
    
        public void writeProgram(){
            state.writeProgram(this);
        }
    
    
    }

     运行结果:

      

  • 相关阅读:
    The user specified as a definer (”@’%') does not exist解决方法
    mongodb下载地址
    镜像系统,超好用
    部署mysql后,无法设置用户远程登陆(%只所有用户,不可以,只能给指定的ip?)
    Libcap的简介及安装
    GCC命令基础
    gcc安装(centos)
    React Native 踩坑
    webpack 和 babel
    React 开发笔记
  • 原文地址:https://www.cnblogs.com/nicknailo/p/9511208.html
Copyright © 2011-2022 走看看