设计模式-状态模式
一、什么是状态模式当一个对象的内在状态改变时允许改变其行为。状态模式(State Pattern):主要用来解决对象在多种状态下转换时需要对外输出不同的行为。结构状态模式包含以下几个主要角色Contxet:环境角色用于维护State状态抽象状态State定义了一个接口用于封装与上下文相关的一个状态的行为。具体状态Concrete State实现了状态接口负责处理与该状态相关的行为。具体状态对象通常会在内部维护一个对上下文对象的引用以便根据不同的条件切换到不同的状态。二、实现我们将创建一个State接口和实现了State接口的实体状态类。Context是一个带有某个状态的类。StatePatternDemo我们的演示类使用Context和状态对象来演示 Context 在状态改变时的行为变化。State接口public interface State { void doAction(Context context); }具体状态public class StartState implements State { Override public void doAction(Context context) { System.out.println(设备启动中...); context.setState(this); } Override public String toString() { return 启动状态; } } public class StopState implements State { Override public void doAction(Context context) { System.out.println(设备停止中...); context.setState(this); } Override public String toString() { return 停止状态; } }Context 角色public class Context { private State state; public Context() { this.state null; } public State getState() { return state; } public void setState(State state) { this.state state; } }测试代码public class StatePatternDemo { public static void main(String[] args) { Context context new Context(); StartState startState new StartState(); startState.doAction(context); System.out.println(context.getState().toString()); StopState stopState new StopState(); stopState.doAction(context); System.out.println(context.getState().toString()); } }结果三、状态模式总结状态模式将每个状态的行为封装到一个类中增强代码可读性。符合开闭原则当状态过多时会产生很多状态类系统会变得复杂、维护难度升级。使用场景当一个对象、事件有多种状态对不同的状态要求有不同的行为时可以考虑使用状态模式。