在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化。
如何在运行时根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转化之间引入紧耦合?允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。
一,结构:
二,示例代码:
public interface State { public void handle(Context context); } class ConcreteStateA implements State { public void handle(Context context) { context.set_state(new ConcreteStateB()); } } class ConcreteStateB implements State { public void handle(Context context) { context.set_state(new ConcreteStateA()); } } public class Context { private State _state; public Context(State state) { this._state = state; } public void request() { _state.handle(this); } public State get_state() { return _state; } public void set_state(State _state) { this._state = _state; } } /** * 客户端代码 * @author Salmon * */ public class Client { public static void main(String[] args) { Context c = new Context(new ConcreteStateA()); c.request(); c.request(); c.request(); c.request(); } }