@startuml class Task { -id: int -totalExecutionTime: int -priority: int -- +Task(id: int, totalExecutionTime: int, priority: int) +Task(id: int, totalExecutionTime: int) +getId(): int +getTotalExecutionTime(): int +getPriority(): int } interface TaskScheduler { +scheduleTask(task: Task): void +update(int deltaTime): void } class FirstComeFirstServedScheduler extends TaskScheduler {} class PriorityScheduler extends TaskScheduler {} class RoundRobinScheduler extends TaskScheduler {} class ShortestRemainingTimeFirstScheduler extends TaskScheduler {} class Simulator { -scheduler: TaskScheduler -Map> tasks -deltaTime: int -simulateTime: int -LinkedHashMap taskCompletedOrder -elapsedTime: int -- +Simulator(scheduler: TaskScheduler, tasks: Map>, deltaTime: int, simulateTime: int) +simulate(): LinkedHashMap } Task -- TaskScheduler : "1..*" TaskScheduler -- Simulator : "1" Simulator ..> Task : "1..*" @enduml