Daily Archives: August 28, 2021

Design Elevators

电梯调度
停车场
Elevator
max people capacity
max weight
airstairs[only to living area], goods stair[to storage area]

Building
Each elevator can each level or certain levels?
Inside building the button controls all elevator or just one elevator.

Scheduler
same direction > static > different direction

when elevator is running, can we press the button for different direciton level.
+, public
-, private
#, protected
~, package

Use case
ElevatorSystem
handle request

Elevator
external request
internal request
open door
close door
check weight

ElevatorButton
press

Class diagram

class ElevatorSystem {
Lst<Elevator> elevators;
void handleRequest(ExternalRequest r);
}

class Elevator {
List<ElevatorButton> buttons
boolean[] stops;

public void handleExternalRequest();
public void handleInternalRequest();
}

class InvalidExternalRequestException;
open to extension, close to modification
different schedules on different days(weekday/weekend)
Strategy Pattern

interface HandleRequestStrategy
class PeakHourHandleRequestStrategy;
class NormalHourHandleRequestStrategy;

try

class InvalidRequestException extends Exception;

interface HandleRequestStrategy {
    void handleRequest();
}

enum ACTION {
    UP,DOWN,OPEN,CLOSE;
}

class ExternalRequest {
    int currentLevel;
    ACTION action;
}


// 
class NormalHourHandleRequestStrategy {
    void handleRequest(List<Elevator> elevators, Request request) {
        // all elevators go to every floor
    }
}

// 
class NormalHourHandleRequestStrategy {
    void handleRequest(List<Elevator> elevators, Request request) {
        // first half elevator go to half floors. 2nd half elevators go to 2nd half floors.
    }
}

class ElevatorSystem implement HandleRequestStrategy {
    List<Elevator> elevators;
    handleRequest(List<Elevator> elevators);
}

class Elevator {
    List<Buttons> buttons;
    boolean[] stops;
    int currentLevel;
    STATUS status;

    void handleInternalRequest();
    void handleExternalRequest();

    void openDoor();
}

enum {
    UP,DOWN,STOP;
}

https://www.youtube.com/watch?v=CsWFuFdlBVU