状态模式

个人博客

http://www.milovetingting.cn

状态模式

模式介绍

状态模式中的行为是由状态来决定的,不同状态下有不同的行为。

模式定义

当一个对象的内在状态改变时允许其改变行为。

使用场景

  1. 一个对象的行为取决于它的状态,并且它必须在运行时根据状态来改变行为。

  2. 代码中包含大量与对象状态有关的条件语句。

简单使用

定义状态接口

public interface TvState {
	public void nextChannel();
	public void prevChannel();
	public void turnUp();
	public void turnDown();
}

定义实现类

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() {
		
	}

}

定义控制类接口

public interface PowerController {
	public void powerOn();
	public void powerOff();
}

定义控制类的实现类

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();
	}

}

调用

public static void main(String[] args) {
		TvController tvController = new TvController();
		tvController.powerOn();
		tvController.nextChannel();
		tvController.turnUp();
		tvController.powerOff();
		tvController.turnDown();
	}

输出结果

开机啦
下一个频道
增加音量
关机啦
posted @ 2020-01-16 23:45  milovetingting  阅读(96)  评论(0编辑  收藏  举报