@startuml package com.iluwatar.priority.queue { class Application { + Application() + main(args : String[]) {static} } class Message { - message : String - priority : int + Message(message : String, priority : int) + compareTo(o : Message) : int + toString() : String } class PriorityMessageQueue { - LOGGER : Logger {static} - capacity : int - queue : T[] - size : int + PriorityMessageQueue(queue : T[]) + add(t : T extends Comparable) - ensureCapacity() - hasLeftChild(index : int) : boolean - hasParent(index : int) : boolean - hasRightChild(index : int) : boolean + isEmpty() : boolean - left(parentIndex : int) : T extends Comparable - leftChildIndex(parentPos : int) : int - maxHeapifyDown() - maxHeapifyUp() - parent(childIndex : int) : T extends Comparable - parentIndex(pos : int) : int + print() + remove() : T extends Comparable - right(parentIndex : int) : T extends Comparable - rightChildIndex(parentPos : int) : int - swap(fpos : int, tpos : int) } class QueueManager { - messagePriorityMessageQueue : PriorityMessageQueue + QueueManager(initialCapacity : int) + publishMessage(message : Message) + receiveMessage() : Message } class Worker { - LOGGER : Logger {static} - queueManager : QueueManager + Worker(queueManager : QueueManager) - processMessage(message : Message) + run() } } QueueManager --> "-messagePriorityMessageQueue" PriorityMessageQueue Worker --> "-queueManager" QueueManager @enduml