Java 实现状态(State)模式

Posted yfceshi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 实现状态(State)模式相关的知识,希望对你有一定的参考价值。

/**
 * @author stone
 */
public class WindowState {
	private String stateValue;
	
	public WindowState(String stateValue) {
		this.stateValue = stateValue;
	}
	
	public String getStateValue() {
		return stateValue;
	}

	public void setStateValue(String stateValue) {
		this.stateValue = stateValue;
	}
	
	public void handle() {
		/*
		 * 依据不同状态做不同操作, 再切换状态
		 */
		if ("窗体".equals(stateValue)) {
			switchWindow();
			this.stateValue = "全屏";
		} else if ("全屏".equals(stateValue)) {
			switchFullscreen();
			this.stateValue = "窗体";
		}
	}
	
	private void switchWindow() {
		System.out.println("切换为窗体状态");
	}
	
	private void switchFullscreen() {
		System.out.println("切换为全屏状态");
	}
	
}

/**
 * 状态的使用
 * @author stone
 *
 */
public class WindowContext {
	private WindowState state;
	
	public WindowContext(WindowState state) {
		this.state  = state;
	}
	
	public WindowState getState() {
		return state;
	}
	
	public void setState(WindowState state) {
		this.state = state;
	}
	
	public void switchState() {
		this.state.handle();
	}
}

/*
 * 状态(State)模式 行为型模式
 * 既改变对象的状态,又改变对象的行为
 * 依据状态,改变行为
 */
public class Test {
	public static void main(String[] args) {
		/*
		 * 本例的 状态值仅仅有两个,由状态类自身控制
		 * 也能够把状态值的控制,交由client来设置
		 */
		WindowContext context = new WindowContext(new WindowState("窗体"));
		context.switchState();
		context.switchState();
		context.switchState();
		context.switchState();

	}
}

打印

切换为窗体状态
切换为全屏状态
切换为窗体状态
切换为全屏状态









以上是关于Java 实现状态(State)模式的主要内容,如果未能解决你的问题,请参考以下文章

Java 实现状态(State)模式

21-状态(State)模式Ruby实现

JAVA设计模式之状态模式(state)

State模式(状态设计模式)

程序设计模式 —— State 状态模式

设计模式之- 状态模式(State Pattern)