电梯调度
停车场
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