[一天一个设计模式]-[状态模式]

状态模式(State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。

状态模式和策略模式很相似,

  • 策略模式的每个策略是平等的,所有策略调用者都应该知道,由调用者自己判断选择运用哪个策略
  • 状态模式的每个状态存在转换关系,调用者不用知道所有的状态,状态的转变一般不由调用者主动设置状态

状态模式包含以下主要角色。

  • 环境(Context)角色:也称为上下文,它定义了客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。
  • 抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为。
  • 具体状态(Concrete State)角色:实现抽象状态所对应的行为。

举个栗子,烧开水,烧的时间越长水的温度越高知道水开

interface State{
    void state(Pot pot);
}

class BoilState implements State{
    
    @Override
    public void state(Pot pot){
        sout("water is boil");
    }
}

class NotBoilState implements State{
    
    @Override
    public void state(Pot pot){
        sout("water is not boil");
    }
}

class Pot{
    Integer temp=80;
    
    State state; 
    
    public void heatUp(){
        temp+=10;
        if(temp == 100){
            this.state = new BoilState(); 
        }else{
            this.state = new NotBoilState();
        }
        state.state(this);
    }
    
    public void play(){
        state.handle(this);
    }
}

main(){
    Pot pot=new Pot(); 
    
    pot.heatUp();
    pot.heatUp();
    pot.heatUp();
}

posted @ 2019-12-12 08:56  A_yes  阅读(89)  评论(0编辑  收藏  举报