状态模式
个人博客
状态模式
模式介绍
状态模式中的行为是由状态来决定的,不同状态下有不同的行为。
模式定义
当一个对象的内在状态改变时允许其改变行为。
使用场景
- 
一个对象的行为取决于它的状态,并且它必须在运行时根据状态来改变行为。 
- 
代码中包含大量与对象状态有关的条件语句。 
简单使用
定义状态接口
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();
	}
输出结果
开机啦
下一个频道
增加音量
关机啦
    Android代码搬运工一枚,欢迎留言讨论交流!
个人主页:http://www.milovetingting.cn
个人主页:http://www.milovetingting.cn
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号