* add leader followers pattern * use var and streams instead in App::execute * use logger instead of printing to system output stream
54 lines
1.3 KiB
Plaintext
54 lines
1.3 KiB
Plaintext
@startuml
|
|
package com.iluwatar.leaderfollowers {
|
|
class App {
|
|
+ App()
|
|
- addTasks(taskSet : TaskSet) {static}
|
|
- execute(workCenter : WorkCenter, taskSet : TaskSet) {static}
|
|
+ main(args : String[]) {static}
|
|
}
|
|
class Task {
|
|
- finished : boolean
|
|
- time : int
|
|
+ Task(time : int)
|
|
+ getTime() : int
|
|
+ isFinished() : boolean
|
|
+ setFinished()
|
|
}
|
|
class TaskHandler {
|
|
+ TaskHandler()
|
|
+ handleTask(task : Task)
|
|
}
|
|
class TaskSet {
|
|
- queue : BlockingQueue<Task>
|
|
+ TaskSet()
|
|
+ addTask(task : Task)
|
|
+ getSize() : int
|
|
+ getTask() : Task
|
|
}
|
|
class WorkCenter {
|
|
- leader : Worker
|
|
- workers : List<Worker>
|
|
+ WorkCenter()
|
|
+ addWorker(worker : Worker)
|
|
+ createWorkers(numberOfWorkers : int, taskSet : TaskSet, taskHandler : TaskHandler)
|
|
+ getLeader() : Worker
|
|
+ getWorkers() : List<Worker>
|
|
+ promoteLeader()
|
|
+ removeWorker(worker : Worker)
|
|
}
|
|
class Worker {
|
|
- id : long
|
|
- taskHandler : TaskHandler
|
|
- taskSet : TaskSet
|
|
- workCenter : WorkCenter
|
|
+ Worker(id : long, workCenter : WorkCenter, taskSet : TaskSet, taskHandler : TaskHandler)
|
|
+ equals(o : Object) : boolean
|
|
+ hashCode() : int
|
|
+ run()
|
|
}
|
|
}
|
|
Worker --> "-taskSet" TaskSet
|
|
Worker --> "-taskHandler" TaskHandler
|
|
TaskSet --> "-queue" Task
|
|
Worker --> "-workCenter" WorkCenter
|
|
@enduml |