概念
与策略模式结构一样,但目的和本质不同。状态模式的行为是平行的,不可替换的;策略模式的行为是相互独立可替换的。状态模式是把对象的行为包装在不同的状态对象中,让对象在其内部状态改变时行为也随之改变。优点同样是可扩展性和让代码清晰;缺点也是增加类和对象数量。
使用场景
- 一个对象的行为取决于它的状态
- 代码中含有大量与对象状态有关的条件语句(通过多态去除过多的if-else)
实现方式
interface State{
void fun();
}
public class State1 implements State{ //开机后的状态 可以操作
public void fun(){
// do something;
System.out.println("hello");
}
}
public class State2 implements State{//关机后的状态 无操作
public void fun(){
// do nothing;
return;
}
}
public interface TVController{
void poweron();
void poweroff();
}
public class TVContext implements TVController{
State mState;
public TVContext(){
mState = new State2(); //初始化为关机状态
}
private void setState(State s){
mState = s;
}
@Override
public void poweron(){ //开机
setState(new State1());
}
@Override
public void poweroff{ //关机
setState(new State2());
}
public void watch(){ //看电视(开机状态才看得到,关机状态则什么都没有)
mState.fun();
}
}
public class Test {
public static void main(String[] args){
TVContext tv = new TVContext();
tv.poweron();
tv.watch();
tv.poweroff();
tv.watch();
}
}