行为型--状态模式 港控/mmm° 2021-09-28 16:38 257阅读 0赞 ## 标题 ## -------------------- 当对象的内部状态改变时,使其行为也随着改变。 优点: 1. 将所有与某个特定状态有关的行为封装到一个类中,并且将属于不同状态的行为分割开。使得对象的行为跟随状态变化而变化。 2. 允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。 3. 状态对象可以被多个环境对象共享,从而减少系统中对象的个数。 缺点: 1. 会增加系统类和对象的个数。 2. 状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。 3. 状态模式对"开闭原则"的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码。 ## 举例 ## -------------------- public class Client { public static void main(String[] args) { State state = new State(); Context context = new Context(state); //设置第一种状态 state.setValue("state1"); context.method(); //设置第二种状态 state.setValue("state2"); context.method(); } } class State{ private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } //state1时执行 public void method1(){ System.out.println("execute the first opt!"); } //state2时执行 public void method2(){ System.out.println("execute the second opt!"); } } class Context { private State state; public Context(State state) { this.state = state; } public State getState() { return state; } public void setState(State state) { this.state = state; } public void method() { System.out.println("状态为:" + state.getValue()); if (state.getValue().equals("state1")) { state.method1(); } else if (state.getValue().equals("state2")) { state.method2(); } } } Output: 状态为:state1 execute the first opt! 状态为:state2 execute the second opt!
还没有评论,来说两句吧...