在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化。
如何在运行时根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转化之间引入紧耦合?允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。
一,结构:
二,示例代码:
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();
}
}