一:状态模式
在java中,面向对象编程中对象的定义是具象的行为与属性的集合,也就是说一个对象实际上包含了属性和行为。在实际生产中,我们经常会遇到这样的问题,对象的行为是由对象的某一个或多个属性去管理的。最常见的例子就是流程审批:在一个流程中,流程的审核状态决定该流程是走下一步还是流程被驳回。
通过上面总结:对象的行为去匹配匹配状态。但是如果状态写死了,对于行为的扩展是很差的,那么我们需要遵循一个原则,对象的属性和对象的行为分离。,这里我们将属性分离出来,最后产生以后的角色:
环境角色:即抽象出对象的属性,统一做属性管理。
角色对象:即拥有行为和属性的对象
二:代码解释
1.属性抽象以及具体的实现
package test;
/**
* 状态管理器
* ClassName: State <br/>
* date: 2019年8月17日 上午7:08:33 <br/>
*
* @author monxz
*/
public interface State {
void setState();
}
package test;
public class StartState implements State{
@Override
public void setState() {
System.err.println("开始执行");
}
}
package test;
public class RunState implements State{
@Override
public void setState() {
System.err.println("开始执行");
}
}
package test;
public class StopState implements State{
@Override
public void setState() {
System.err.println("结束执行");
}
}
2.环境角色
package test;
public class Context {
private State state;
public Context(State state){
this.state=state;
}
public void run(){
state.setState();
}
}
3.测试
package test;
public class test {
public static void main(String[] args) {
Context ct=new Context(new StartState());
ct.run();
}
}
三:说明
写到这里,我们发现状态模式 似乎与策略、工厂模式差不多,无非就是外面封装了一层而已,但是这离我们应该明白一点,同一个环境对象,至少是同时刻状态排他,同方法执行排他。什么意思呢,在同一个时刻环境对象只能执行一个方法,执行一个方法时,其他方法堵塞。这是分别其他俩种模式的最佳逻辑分别了。