1类图
![这里写图片描述](https://img-blog.csdn.net/20171010084945175?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzY5NjQ2Nzc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2定义:
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类
3应用场景
3.1 一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为
3.2 代码中有大量与状态有关的语句。
4电视状态接口
public interface TvState {
public void nextChannel();
public void prevChannel();
public void turnUp();
public void turnDown();
}
5关机状态
public class PowerOffState implements TvState {
@Override
public void nextChannel() {
}
@Override
public void prevChannel() {
}
@Override
public void turnUp() {
}
@Override
public void turnDown() {
}
}
6开机状态
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("调低音量");
}
}
7电源接口
public interface PowerController {
public void powerOn();
public void powerOff();
}
8遥控器类似于context
public class TvController implements PowerController {
TvState mTvState;
public void setmTvState(TvState mTvState) {
this.mTvState = mTvState;
}
@Override
public void powerOn() {
setmTvState(new PowerOnState());
System.out.println("开机");
}
@Override
public void powerOff() {
setmTvState(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();
}
}
9测试
public class Client {
public static void main(String[] args) {
TvController tvController = new TvController();
tvController.powerOn();
tvController.nextChannel();
tvController.prevChannel();
tvController.turnUp();
tvController.powerOff();
tvController.turnDown();
}
}