一.状态设计模式介绍
如果我们基于一个对象的状态来改变对象的行为,通常会在该对象中用if else或switch case语句对状态进行分类,当状态增加时还需要修改源码中的if或switch语句,很显然系统耦合性很高,违反的开闭原则。状态设计模式就是用来解决这个问题,通过状态(State)接口的实现以及引用状态的类(Context)来实现松耦合的目标。
二.状态设计模式代码用例
以电视遥控器为例,电视遥控器上的ON按钮表示打开电视,OFF按钮表示关闭电视。
1.状态接口State(状态接口只有行为)
interface State { public void doAction(); }
2.具体状态的实现(不同状态对应的不同实现)TVStartState、TVStopState。
class TVStartState implements State { @Override public void doAction() { System.out.println("TV is turned ON"); } } class TVStopState implements State { @Override public void doAction() { System.out.println("TV is turned OFF"); } }
3.引用状态的类TVContext(拥有对状态对象的索引)
class TVContext implements State { private State tvState; public void setState(State state) { this.tvState=state; } public State getState() { return this.tvState; } @Override public void doAction() { this.tvState.doAction(); } }
4.测试类
public class StatePatternTest { public static void main(String[] args) { TVContext context = new TVContext(); State tvStartState = new TVStartState(); State tvStopState = new TVStopState(); context.setState(tvStartState); context.doAction(); context.setState(tvStopState); context.doAction(); } }