状态模式

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);
    }


}

 运行结果:

  

原文地址:https://www.cnblogs.com/nicknailo/p/9511208.html