状态模式(State Pattern)中,类的行为是基于它的状态改变的。
例如QQ的隐藏在线功能。使用场景可用于
1、行为随状态改变而改变的场景。 2、条件、分支语句的代替者。
通常命令模式的接口中只有一个方法。而状态模式的接口中有一个或者多个方法。
而且,状态模式的实现类的方法,一般返回值,或者是改变实例变量的值。
也就是说,状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆盖接口中的方法。状态模式和命令模式一样,也可以用于消除 if...else 等条件选择语句。
package com.ceshi19; public class State { private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public void hide(){ System.out.println("我是隐藏的!"); } public void online(){ System.out.println("我是在线的!"); } }
package com.ceshi19; public 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() { if (state.getValue().equals("hide")) { state.hide(); } else if (state.getValue().equals("online")) { state.online(); } } }
package com.ceshi19; public class Test { public static void main(String[] args) { State state = new State(); Context context = new Context(state); //设置第一种状态 state.setValue("hide"); context.method(); //设置第二种状态 state.setValue("online"); context.method(); } }
做网站的时候,我们有时希望根据对象的某一属性,区别开他们的一些功能,比如说简单的权限控制等