BAEL-2441: Providing example for Implementing simple State Machine with Java Enums.
This commit is contained in:
parent
f1fa9c8253
commit
4c9ea991cc
|
@ -0,0 +1,46 @@
|
||||||
|
package com.baeldung.algorithms.enumstatemachine;
|
||||||
|
|
||||||
|
public enum LeaveRequestState {
|
||||||
|
|
||||||
|
Submitted {
|
||||||
|
@Override
|
||||||
|
public LeaveRequestState nextState() {
|
||||||
|
System.out.println("Starting the Leave Request and sending to Team Leader for approval.");
|
||||||
|
return Escalated;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String responsiblePerson() {
|
||||||
|
return "Employee";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Escalated {
|
||||||
|
@Override
|
||||||
|
public LeaveRequestState nextState() {
|
||||||
|
System.out.println("Reviewing the Leave Request and escalating to Department Manager.");
|
||||||
|
return Approved;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String responsiblePerson() {
|
||||||
|
return "Team Leader";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Approved {
|
||||||
|
@Override
|
||||||
|
public LeaveRequestState nextState() {
|
||||||
|
System.out.println("Approving the Leave Request.");
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String responsiblePerson() {
|
||||||
|
return "Department Manager";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public abstract String responsiblePerson();
|
||||||
|
|
||||||
|
public abstract LeaveRequestState nextState();
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
package com.baeldung.algorithms.enumstatemachine;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class LeaveRequestStateTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenLeaveRequest_whenStateEscalated_thenResponsibleIsTeamLeader() {
|
||||||
|
LeaveRequestState state = LeaveRequestState.Escalated;
|
||||||
|
|
||||||
|
String responsible = state.responsiblePerson();
|
||||||
|
|
||||||
|
assertEquals(responsible, "Team Leader");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenLeaveRequest_whenStateApproved_thenResponsibleIsDepartmentManager() {
|
||||||
|
LeaveRequestState state = LeaveRequestState.Approved;
|
||||||
|
|
||||||
|
String responsible = state.responsiblePerson();
|
||||||
|
|
||||||
|
assertEquals(responsible, "Department Manager");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenLeaveRequest_whenNextStateIsCalled_thenStateIsChanged() {
|
||||||
|
LeaveRequestState state = LeaveRequestState.Submitted;
|
||||||
|
|
||||||
|
state = state.nextState();
|
||||||
|
assertEquals(state, LeaveRequestState.Escalated);
|
||||||
|
|
||||||
|
state = state.nextState();
|
||||||
|
assertEquals(state, LeaveRequestState.Approved);
|
||||||
|
|
||||||
|
state = state.nextState();
|
||||||
|
assertEquals(state, LeaveRequestState.Approved);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue