java设计模式参考文章:
Java设计模式实战,23种设计模式介绍以及在Java中的实现,Java设计模式, Java经典设计模式之五大创建型模式
## 定义 ##
允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。
代码举例
案例: 问题跟踪(Bug状态流转): 新建(New) -> 打开(Open) -> 解决(Fixed) -> 关闭(Closed)……..
public interface State {
void handle(Context context);
}
public class NewState implements State {
public void handle(Context context) {
if (context.getState() == this) {
// 本状态下的核心业务处理
System.out.println("测试: 发现了Bug");
// 状态流转
context.setState(new OpenState());
}
}
}
public class OpenState implements State {
public void handle(Context context) {
if (context.getState() == this) {
System.out.println("开发: Bug已经看到, 正在处理");
context.setState(new FixedState());
}
}
}
public class FixedState implements State {
public void handle(Context context) {
if (context.getState() == this) {
System.out.println("开发: Bug已经修复");
}
}
}
public class Context {
private State state;
public Context(State state) {
this.state = state;
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
public void request() {
if (state != null) {
state.handle(this);
}
}
}
public class Main {
public static void main(String[] args) {
Context context = new Context(new NewState());
context.request();
context.request();
context.request();
context.request();
context.request();
}
}
## 优点 ##
- 使用一个类封装对象的一种状态,很容易增加新的状态
- 在状态模式中,环境(Context)中不必出现大量的条件判断语句。环境(Context)实例所呈现的状态变得更加清晰、容易理解。
- 使用状态模式可以让用户程序很方便地切换环境(Context)实例的状态。
- 使用状态模式不会让环境(Context)中的实例中出现内部状态不一致的情况。
- 当状态对象没有实例变量时,环境(Context)的各个实例可以共享一个状态对象。