设计模式--状态模式

拥有回忆 提交于 2020-04-10 10:09:03

状态模式(state):

当对象的状态改变时,同时改变其行为。

QQ状态模式的特点:

1. 可以通过改变状态获得不同的行为。
2. 你的好友能同时看到你的变化。

示例:

状态模式测试类StateTest.java

/**
 * 状态模式测试类
 *
 * @author Kevin
 * @date 2016-3-16
 */
public class StateTest {

	public static void main(String[] args) {
		State state = new State();
		QQContext qqContext = new QQContext(state);

		/* 上线 */
		state.setValue("online");
		qqContext.switchStatus();

		/* 下线 */
		state.setValue("offline");
		qqContext.switchStatus();
	}

}

QQ状态模式的切换类QQContext.java

/**
 * QQ状态模式的切换类
 *
 * @author Kevin
 * @date 2016-3-16
 */
public class QQContext {

	/* 上线状态 */
	private static final String ONLINE = "online";

	/* 离线状态 */
	private static final String OFFLINE = "offline";

	/* 状态 */
	private State state;

	public QQContext(State state) {
		this.state = state;
	}

	/**
	 * 切换状态
	 *
	 * @author Kevin
	 */
	public void switchStatus() {
		String stateValue = state.getValue();
		if (ONLINE.equals(stateValue)) {
			state.online();
		} else if(OFFLINE.equals(stateValue)) {
			state.offline();
		}
	}

	public State getState() {
		return state;
	}

	public void setState(State state) {
		this.state = state;
	}
}

状态类State.java

/**
 * 状态类
 *
 * @author Kevin
 * @date 2016-3-16
 */
public class State {

	/* 状态值 */
	private String value;

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}

	/**
	 * 上线
	 *
	 * @author Kevin
	 */
	public void online() {
		System.out.println("execute online operation");
	}

	/**
	 * 离线
	 *
	 * @author Kevin
	 */
	public void offline() {
		System.out.println("execute offline operation");
	}
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!