带有状态机设计模式的 Android Model-View-Presenter

Sim*_*mon 6 mvp android design-patterns state-machine state-pattern

假设我有一个具有 3 个状态的元素:state1, state2, state3。最基本的流程是:

state1 -> state2 -> state3 -> state1 -> ... 等等

单击按钮时状态会更改。我实现了状态机设计模式来管理这些状态。

当然,当状态发生变化时,布局和逻辑层中的某些事情也会发生变化。问题是,我想知道 MVP 实现在这些状态更改后会是什么样子。视图更改逻辑应该放在哪里,模型更改逻辑应该放在哪里。一个基本的例子会很棒。

这是我的代码:

MainActivity.java

StateContext stateContext;

@OnClick(R.id.button_change_state)
public void onClickChangeStateButton(View view) {
    stateContext.takeAction();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
    stateContext = new StateContext();
}
Run Code Online (Sandbox Code Playgroud)

StateContext.java

public class StateContext {
    private State state;
    public StateContext() {
        this.state = new State1();
    }

    public void setState(final State state) {
        this.state = state;
    }

    public void takeAction() {
        state.takeAction(this);
    }

}
Run Code Online (Sandbox Code Playgroud)

State.java

public interface State {
    void takeAction(StateContext stateContext);
}
Run Code Online (Sandbox Code Playgroud)

例子State1.java

public class State1 implements State {

    @Override
    public void takeAction(StateContext stateContext) {
        Toast.makeText(Application.getContext(), "Graphical actions here, going to state2", Toast.LENGTH_SHORT ).show();
        stateContext.setState(new State2());
    }
}
Run Code Online (Sandbox Code Playgroud)