java状态机设计模式及实现(java状态机在订单中应用)
程序员文章站
2023-11-15 09:44:16
状态模式(state pattern):一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决,当控制一个对象状态的条件表达式过于复杂时的情况;把状态的判断逻辑转移到表...
状态模式(state pattern):
一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决,当控制一个对象状态的条件表达式过于复杂时的情况;把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化;
状态模式的角色:
上下文环境(context)角色、抽象状态(state)角色、具体状态(concrete state)和客户端(client)角色;
状态模式的案例:
实现类图:
实现代码:
/**
* 上下文环境(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());
}
}