i am trying to implment this using state design pattern please correct this i think i am missing or doing something wrong :::::::::::::::::::::class Elevator{
IElevatorState elevatorState;
IDoorState doorState;
List listOfMovingUpRequestedFloor;
List listOfMovingDownRequestedFloor;
int cuurent_floor;
public Elevator(){
this.listOfMovingDownRequestedFloor = new ArrayList<>();
this.listOfMovingUpRequestedFloor = new ArrayList<>();
this.cuurent_floor = 0;
this.elevatorState = new elevatorIdleState(this);
}
handlerequest(int floorNo){
elevatorState.handle(request);
};
handleDoorRequest(int floorNo){
doorState.handleDoorRequest(floorNo);
}
public void changeState(IElevatorState elevatorState){
this.elevatorState = elevatorState;
}
public void addFloorToMovingUpList(int floor){
this.listOfMovingUpRequestedFloor.add(floorNo);
}
public void addFloorToMovingDown(int floor){
this.listOfMovingDownRequestedFloor.add(floorNo);
}
public void changeDoorState(){
}
}
interface IElevatorState{
handlerequest(int floor);
}
interface IDoorState{
handleDoorRequest();
}
class openDoorState extends IDoorState{
public void closeDoorWithDelay() {
try {
Thread.sleep(20000); // 20 seconds delay
changeDoorState(new closedDoorState(elevator));
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
handleDoorRequest(){
if(listOfMovingUpRequestedFloor.get(floorNo).isNotEmpty()&& is not equal to current floor){
changeDoorStateToOClose();
//and move the lift
}
else {
changeState(new elevatorIdleState(elevator));
}
}
}
class closedDoorState extends IDoorState{
handleDoorRequest(){
if(listOfMovingUpRequestedFloor.get(floorNo).isPresent() || listOfMovingDownRequestedFloor.get(floorNo).isPresent() ){
changeDoorState(new openDoorState(Elevator elevator));
if(listOfMovingDownRequestedFloor.remove(floorNo)){
}
}
else {
// remain closed and move in the same direction
}
}
}
class elevatorIdleState extends IElevatorState{
Elevator elevator;
public elevatorIdleState(Elevator elevator){
this.elevator=elevator;
}
handlerequest(int floor){
int elevatorNo = Elevator.getcuurent();
if(elevatorNo>floor){
this.listOfMovingUpRequestedFloor.add(floor);
elevator.changeState(new elevatorMovingUpElevator(this.elevator));
}
else {
this.listOfMovingDownRequestedFloor.add(floor);
elevator.changeState(new elevatorMovingDownElevator(this.elevator));
}
}
}
class elevatorMovingUpElevator extends IElevatorState{
Elevator elevator;
public elevatorIdleState(Elevator elevator){
this.elevator=elevator;
}
handlerequest(int floor){
int elevatorNo = Elevator.getcuurent();
if(elevatorNo>floor){
this.listOfMovingUpRequestedFloor.add(floor);
}
else {
this.listOfMovingDownRequestedFloor.add(floor);
}
}
}
class elevatorMovingDownElevator extends IElevatorState{
Elevator elevator;
public elevatorIdleState(Elevator elevator){
this.elevator=elevator;
}
handlerequest(int floor){
int elevatorNo = Elevator.getcuurent();
if(elevatorNo>floor){
this.listOfMovingUpRequestedFloor.add(floor);
}
else {
this.listOfMovingDownRequestedFloor.add(floor);
}
}
}
class Display{
int floorNo;
int capacity;
// moving up or down
Direction direction;
public void display();
// this is like setter method whenever the person eneter the
// the elevator will update the direction , capacity and floorno and alll.......
public void update();
}
Course: https://www.educative.io/courses/grokking-the-low-level-design-interview-using-ood-principles
Lesson: Class Diagram for the Elevator System