* add leader followers pattern * use var and streams instead in App::execute * use logger instead of printing to system output stream
This commit is contained in:
BIN
leader-followers/etc/leader-followers.png
Normal file
BIN
leader-followers/etc/leader-followers.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 48 KiB |
54
leader-followers/etc/leader-followers.urm.puml
Normal file
54
leader-followers/etc/leader-followers.urm.puml
Normal file
@ -0,0 +1,54 @@
|
||||
@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
|
Reference in New Issue
Block a user