i'm developing an android application and in a specific situation, i faced with problem to manage multiple state of behaviour of an object. I read about State Pattern and solve my problet with help of it.
but still some dark points exists to clear for me.my question is how pass appropriate dependencies to each state class?let me show you, what i do in my application. i create:
- a state Interface
- a context Class
- and three state-Class
this is first State-Class:
public class SnackBarArrangeItemsState implements SnackBarState {
@Override
public void doAction(SnackBarContext context, SnackBarStateView stateView, Languages language, int position) {
switch (language) {
case ENGLISH:
stateView.setSpinnerItem(0);
break;
case PERSIAN:
stateView.setSpinnerItem(1);
break;
}
context.setState(new SnackBarChangeItemState());
}
}
in this state, i did some operations and update the view by call:
stateView.setSpinnerItem(itemNumber);
and then change state:
context.setState(new SnackBarChangeItemState());
as you can see i pass two dependeny to this method:
Languages language, int position
this is my two state-Class:
class SnackBarChangeItemState implements SnackBarState {
@Override
public void doAction(SnackBarContext context, SnackBarStateView stateView, Languages language, int position) {
switch (position) {
case 0:
changeLanguageAndShowSnackBar(context, stateView, ENGLISH);
break;
case 1:
changeLanguageAndShowSnackBar(context, stateView, PERSIAN);
break;
}
context.setState(new SnackBarAfterArrangeItemsState());
}
}
only positin variable used in this State.the below is my state class:
public class SnackBarContext {
public SnackBarState getState() {
return state;
}
public void setState(SnackBarState state) {
this.state = state;
}
public SnackBarContext(SnackBarStateView stateView){
this.stateView = stateView;
this.state = new SnackBarArrangeItemsState();
}
public void manageSnackBar(Languages language, int position) {
state.doAction(this, stateView, language, position);
}
}
as you can see, only on method is responsible to change states and i must to pass all dependecies to it.(regardless of each state need theme or not) hot to avoid this situation.how to tell each stateclass to receive only needed dependency? Thanks.
Aucun commentaire:
Enregistrer un commentaire