本文共 1493 字,大约阅读时间需要 4 分钟。
一个对象在其内部状态改变时改变其行为,这个对象我们可以称为状态对象,所以状态模式是一种对象行为型模式。
Context:环境类
Context类也可以称之为上下文类,实际上就是拥有状态的对象,可以理解为状态管理器。State:抽象状态类
抽象状态类可以是一个接口类或者抽象类,反正实现的话都是通过具体状态类。抽象状态类,封装环境类不同状态下的所有动作方法。ConcreteState:具体状态类
具体实现类就比较容易理解了,就是继承抽象状态类,实现具体的方法,不一定所有的抽象方法都有重写,根据环境类状态的改变进行重写就好,其实也是根据状态改变改变动作方法。比如OA的审批就可以应用状态模式,发起申请之后,审批状态可能有受理,批准等等状态,每个状态具有不一样的动作;
游戏的角色扮演,每次游戏版本升级都是会出现状态动作的改变,用状态模式进行设计,可以提高程序可拓展性;
上下文类:
public class Context { private State state; public Context(){ state = null; } public void setState(State state){ this.state = state; } public State getState(){ return state; }}
抽象状态类:
public abstract class State { public void doAction(Context context);}
具体状态类:
public class ConcreteState implements State { public void doAction(Context context) { System.out.println("Player is in start state"); context.setState(this); } public String toString(){ return "Start State"; }}
调用代码:
public class StatePatternDemo { public static void main(String[] args) { Context context = new Context(); ConcreteState concreteState = new ConcreteState(); concreteState.doAction(context); System.out.println(context.getState().toString()); }}
状态模式分为简单状态模式和可切换状态模式。
简单状态模式
简单状态模式就是指状态相对独立,具体状态类可以根据抽象状态类进行编程,也就是不需要用环境类中的setState方法改变状态可切换状态的状态模式
可切换状态模式是状态可以变换的,状态变换了,具体状态类在调用时就要使用环境类的setState改变状态转载地址:http://bycof.baihongyu.com/