设计模式-行为型-状态模式
小于 1 分钟
1、定义
状态模式:允许一个对象在其内部状态改变时改变它的行为
写法
public interface ITvStatus {
public void nextChannel();
public void prevChannel();
public void turnUp();
public void turnDown();
}
public interface IPowerController {
void powerOn();
void powerOff();
}
public class PowerOffState implements ITvStatus{
@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 PowerOnState implements ITvStatus {
@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 TVController implements ITvStatus,IPowerController{
private ITvStatus mTvStatus = new PowerOffState();
public void setmTvStatus(ITvStatus mTvStatus) {
this.mTvStatus = mTvStatus;
}
@Override
public void powerOn() {
setmTvStatus( new PowerOnState() );
System.out.println("开机");
}
@Override
public void powerOff() {
setmTvStatus( new PowerOffState() );
System.out.println("关机");
}
@Override
public void nextChannel() {
mTvStatus.nextChannel();
}
@Override
public void prevChannel() {
mTvStatus.prevChannel();
}
@Override
public void turnUp() {
mTvStatus.turnUp();
}
@Override
public void turnDown() {
mTvStatus.turnDown();
}
}
/**
* 状态模式
* 行为是平行关系,不可替换,自我状态改变
*/
public class TestMain {
public static void main(String[] args){
TVController tvController = new TVController();
tvController.nextChannel();
tvController.powerOff();
tvController.powerOn();
tvController.turnDown();
}
}
代码示例
https://github.com/yinlingchaoliu/23-design-pattern