前言
本章讲解设计模式中状态设计模式的相关知识
方法
1.概念
大家都知道,我们日常生活和工作开发中都有状态的问题。你比如说马路上的红绿灯,这三个灯光就属于三种状态。再比如说我目前开发过的公文系统,公文的各个审批环节就是状态,拟办、初审、复审、流转、办结等。
本次将会使用公文系统中状态作为例子,这里简化为拟办、流转、办结三种状态。
在以往的概念里,我们都会使用if...esle这类语句进行设计,但是这种设计一旦后期的需求发生了改变,那么维护起来相当的复杂!为了解决这个问题,我们可以使用状态设计模式。
2.状态设计模式的实现思路
1)创建对应工程
2)创建状态接口
package status;
/**
* 状态接口
* @author jwang
*
*/
public interface Status {
public void handle();//状态的处理方法
}
3)创建对应的三个状态实现类
拟办:
package status;
public class NBStatus implements Status {
@Override
public void handle() {
System.out.println("进行拟办的相关操作!");
}
}
流转:
package status;
public class LZStatus implements Status {
@Override
public void handle() {
System.out.println("进行流转的相关操作!");
}
}
办结:
package status;
public class BJStatus implements Status {
@Override
public void handle() {
System.out.println("进行办结的相关操作!");
}
}
4)创建状态管理类
package status;
/**
* 状态管理类
* @author jwang
*
*/
public class StatusContext {
private Status status;//公文当前状态
//修改状态方法
public void setStatus(Status status){
System.out.println("切换状态...");
this.status = status;
this.status.handle();//调用切换后的状态的处理方法
}
}
5)编写测试代码进行测试
package status;
public class Test {
public static void main(String[] args) {
StatusContext sc = new StatusContext();
sc.setStatus(new NBStatus());//拟办状态
sc.setStatus(new LZStatus()); //进行流转
sc.setStatus(new BJStatus()); //进行办结
}
}
测试结果如下: