假设我有一个包含3种状态的元素:state1
,state2
,state3
。最基本的流程是:
state1 - > state2 - > state3 - > state1 - > ......等等。
按钮单击时更改状态。我实现了State Machine设计模式来管理这些状态。
当然,当状态发生变化时,某些事情会在布局和逻辑层中发生变化。 问题是,我想知道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();
}
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);
}
}
State.java
:
public interface State {
void takeAction(StateContext stateContext);
}
示例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());
}
}