个人博客
http://www.milovetingting.cn
状态模式
模式介绍
状态模式中的行为是由状态来决定的,不同状态下有不同的行为。
模式定义
当一个对象的内在状态改变时允许其改变行为。
使用场景
一个对象的行为取决于它的状态,并且它必须在运行时根据状态来改变行为。
代码中包含大量与对象状态有关的条件语句。
简单使用
定义状态接口
1 2 3 4 5 6
| public interface TvState { public void nextChannel(); public void prevChannel(); public void turnUp(); public void turnDown(); }
|
定义实现类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| public class PowerOnState implements TvState {
@Override public void nextChannel() { System.out.println("下一个频道"); }
@Override public void prevChannel() { System.out.println("上一个频道"); }
@Override public void turnUp() { System.out.println("增加音量"); }
@Override public void turnDown() { System.out.println("减小音量"); }
}
public class PowerOffState implements TvState{
@Override public void nextChannel() { }
@Override public void prevChannel() { }
@Override public void turnUp() { }
@Override public void turnDown() { }
}
|
定义控制类接口
1 2 3 4
| public interface PowerController { public void powerOn(); public void powerOff(); }
|
定义控制类的实现类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| public class TvController implements PowerController {
private TvState mTvState;
private void setTvState(TvState tvState) { mTvState = tvState; }
@Override public void powerOn() { setTvState(new PowerOnState()); System.out.println("开机啦"); }
@Override public void powerOff() { setTvState(new PowerOffState()); System.out.println("关机啦"); }
public void nextChannel() { mTvState.nextChannel(); }
public void prevChannel() { mTvState.prevChannel(); }
public void turnUp() { mTvState.turnUp(); }
public void turnDown() { mTvState.turnDown(); }
}
|
调用
1 2 3 4 5 6 7 8
| public static void main(String[] args) { TvController tvController = new TvController(); tvController.powerOn(); tvController.nextChannel(); tvController.turnUp(); tvController.powerOff(); tvController.turnDown(); }
|
输出结果