第16章《状态模式》

前端之家收集整理的这篇文章主要介绍了第16章《状态模式》前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

解决的问题:

解决:当控制一个对象状态转换的表达式过于复杂时。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的逻辑简化。

代码结构图如下:

代码具体实现:

/**

  • @Author: cxh
  • @CreateTime: 18/1/14 22:59
  • @ProjectName: JavaBaseTest
    */
    public class AfterNoonState extends State {
    @Override
    void handler(Work work) {
    int curTime=work.time;
    if(curTime<=18){
    System.out.println("当前时间是:"+curTime+":00:00"+",效率一般的工作着");
    }else{
    work.setState(new NightState());
    work.working();
    }
    }
    }


/**

  • @Author: cxh
  • @CreateTime: 18/1/14 22:49
  • @ProjectName: JavaBaseTest
    */
    public class BeforeNoonState extends State {
    @Override
    void handler(Work work) {
    int currTime=work.time;
    if(currTime<12){
    System.out.println("当前时间是:"+currTime+":00:00"+",精力充沛的工作");
    }else{
    work.setState(new NoonState());
    work.working();
    }
    }
    }


/**

  • @Author: cxh

  • @CreateTime: 18/1/14 23:12

  • @ProjectName: JavaBaseTest
    */
    public class Client{
    //test
    public static void main(String[] args) {
    Work work=new Work();
    work.time=10;
    work.working();

     work.time=11;
     work.working();
    
     work.time=13;
     work.working();
    
     work.time=14;
     work.working();
    
     work.time=18;
     work.working();
    
     work.time=20;
     work.working();
    
     work.time=21;
     work.working();
    
     work.time=22;
     work.isFinished=true;
     work.working();

    }
    }



/**

  • @Author: cxh
  • @CreateTime: 18/1/14 23:00
  • @ProjectName: JavaBaseTest
    */
    public class NightState extends State{
    @Override
    void handler(Work work) {
    if(work.isFinished){
    System.out.println("今天工作已完成,准备回家~");
    return;
    }else{
    int curTime=work.time;
    System.out.println("当前时间是:"+curTime+":00:00,"+"继续加班,疲惫至极!!!");
    }
    }
    }


/**

  • @Author: cxh
  • @CreateTime: 18/1/14 22:59
  • @ProjectName: JavaBaseTest
    */
    public class NoonState extends State {
    @Override
    void handler(Work work) {
    int currTime=work.time;
    if(currTime<=13){
    System.out.println("当前时间是:"+currTime+":00:00"+",午饭后,休息中");
    }else{
    work.setState(new AfterNoonState());
    work.working();
    }
    }
    }


/**

  • @Author: cxh
  • @CreateTime: 18/1/14 22:40
  • @ProjectName: JavaBaseTest
    */
    public abstract class State {
    abstract void handler(Work work);
    }


/**

  • @Author: cxh

  • @CreateTime: 18/1/14 22:43

  • @ProjectName: JavaBaseTest
    */
    public class Work{
    //工作是否完成
    public boolean isFinished=false;
    //当前工作时间
    public int time;
    //工作状态
    private State state;
    Work(){
    state=new BeforeNoonState();
    }

    //设置工作状态
    public void setState(State state) {
    this.state = state;
    }

    //工作中
    public void working(){
    state.handler(this);
    }
    }

猜你在找的设计模式相关文章