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

状态模式(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();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值