欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java状态机设计模式及实现(java状态机在订单中应用)

程序员文章站 2023-11-15 09:44:16
状态模式(state pattern):一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决,当控制一个对象状态的条件表达式过于复杂时的情况;把状态的判断逻辑转移到表...

状态模式(state pattern):

一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

状态模式主要解决,当控制一个对象状态的条件表达式过于复杂时的情况;把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化;

状态模式的角色:

上下文环境(context)角色、抽象状态(state)角色、具体状态(concrete state)和客户端(client)角色;

状态模式的案例:

实现类图:

java状态机设计模式及实现(java状态机在订单中应用)

实现代码:

/**
 * 上下文环境(context)角色
 */
public class context {
	
	private state state;

	public context() {
		state = null;
	}

	public void setstate(state state) {
		this.state = state;
	}

	public state getstate() {
		return state;
	}
	
}
/**
 * 抽象状态(state)角色
 */
public interface state {
	
   public void doaction(context context);
   
}
/**
 * 具体状态(concrete state)
 */
public class startstate implements state {

	public void doaction(context context) {
		system.out.println("player is in start state.");
		context.setstate(this);
	}

	public string tostring() {
		return "start state";
	}

}
/**
 * 具体状态(concrete state)
 */
public class stopstate implements state {

	public void doaction(context context) {
		system.out.println("player is in stop state.");
		context.setstate(this);
	}

	public string tostring() {
		return "stop state";
	}
}
/**
 * 客户端
 */
public class client {

	public static void main(string[] args) {
		context context = new context();

		startstate startstate = new startstate();
		startstate.doaction(context);
		system.out.println(context.getstate().tostring());

		stopstate stopstate = new stopstate();
		stopstate.doaction(context);
		system.out.println(context.getstate().tostring());

	}

}