Fix issue #179: Leader Followers Pattern (#1189)

* 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:
Zhang WH
2020-03-27 03:14:44 +08:00
committed by GitHub
parent 6ce33ed6df
commit be1c0b8143
15 changed files with 737 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View 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