在状态模式(State Pattern)中,类的行为是基于它的状态改变的。

 

模式中的角色

  上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理。

  抽象状态(State):定义一个接口以封装使用上下文环境的的一个特定状态相关的行为。

  具体状态(Concrete State):实现抽象状态定义的接口。

 

State

package design.pattern.state;

public abstract class State {
    
    protected Context context;
    
    public State(Context context) {
        this.context = context;
    }
    
    public abstract Context handler();

}

Context

package design.pattern.state;

public class Context {
    private State state;
    
    public Context() {
        this.state = new ConcreteStateA(this);
    }
    
    public void setState(State state) {
        this.state = state;
    }
    
    public Context action() {
        state.handler();
        return this;
    }
}

ConcreteContextA

package design.pattern.state;

public class ConcreteStateA extends State {

    public ConcreteStateA(Context context) {
        super(context);
    }

    @Override
    public Context handler() {
        System.out.println("ConcreteStateA");
        context.setState((new ConcreteStateB(context)));
        return context;
    }
    
}

ConcreteContextB

package design.pattern.state;

public class ConcreteStateB extends State {

    public ConcreteStateB(Context context) {
        super(context);
    }

    @Override
    public Context handler() {
        System.out.println("ConcreteStateB");
        return context;
    }

}

Client

package design.pattern.state;

public class Client {
    public static void main(String[] args) {
        new Context().action().action().action();
    }
}

 

posted on 2017-10-24 20:17  啊哈咧  阅读(169)  评论(0编辑  收藏  举报