设计模式学习笔记十七:状态模式

设计模式学习笔记十七:状态模式

介绍

状态(STATE)模式也叫状态对象(Object for states)模式,属于对象行为型模式。允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
所谓状态模式,其实就是状态机的实现。

使用场景

当业务中有许多的状态,状态有很多的流转,按照最直接的思维模式来实现代码的话,会出现很多的if ... else if ... else...,这种情况下可以使用状态模式重构你的代码。
另外,非状态机模式的逻辑,如果很多的if...else...逻辑大多数也是结构设计不合理导致的。

UML结构图:

State

代码实现

1.上下文,即Context

public class Context {
    State stateA;
    State stateB;

    State state;
    public Context() {
        stateA = new ConcreteStateA(this);
        stateB = new ConcreteStateB(this);
        state = stateA;
    }
    public void setState(State state) {
        this.state = state;
    }
    public void handle() {
        state.handle();
    }
}

2.状态接口,即State

public interface State {
    public void handle();
}

3.具体状态逻辑,即ConcreteStateA和ConcreteStateB

public class ConcreteStateA implements State {
    private Context context;
    public ConcreteStateA(Context context) {
        this.context = context;
    }
    @Override
    public void handle() {
        System.out.println("ConcreteStateA.handle");
        context.setState(context.stateB);
    }
}
public class ConcreteStateB implements State{
    private Context context;
    public ConcreteStateB(Context context) {
        this.context = context;
    }
    @Override
    public void handle() {
        System.out.println("ConcreteStateB.handle");
        context.setState(context.stateA);
    }
}

4.测试调用,TestDrive

public class Run {
    public static void main(String[] args) {
        Context context = new Context();
        context.handle();
        context.handle();
        context.handle();
        context.handle();
    }
}

原文地址:https://www.cnblogs.com/liushijie/p/4774724.html