I personally use a mix between a Task and a State 'framework'
For example, I'll have a Bank Task which contains code for banking. And in that class will be a switch statement that chances based on certain conditions, for example:
switch (getTaskState()) {
case WALK_TO_BANK:
// walk to bank etc
break;
case OPEN_BANK:
// open bank
break;
// etc
}
private enum TaskState {
WALK_TO_BANK,
OPEN_BANK,
BANK_ETC
}
private TaskState getTaskState() {
if (!Bank.contains(Player)) {
return TaskState.WALK_TO_BANK;
// etc
}