您的位置:首页 > 编程语言 > Java开发

java设计模式之状态模式

2017-11-29 17:20 411 查看
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)的各个实例可以共享一个状态对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: