[一天一个设计模式]-[状态模式]
状态模式(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();
}