56 lines
1.2 KiB
Plaintext
56 lines
1.2 KiB
Plaintext
@startuml
|
|
package com.iluwatar.semaphore {
|
|
class App {
|
|
+ App()
|
|
+ main(args : String[]) {static}
|
|
}
|
|
class Fruit {
|
|
- type : FruitType
|
|
+ Fruit(type : FruitType)
|
|
+ getType() : FruitType
|
|
+ toString() : String
|
|
}
|
|
enum FruitType {
|
|
+ APPLE {static}
|
|
+ LEMON {static}
|
|
+ ORANGE {static}
|
|
+ valueOf(name : String) : FruitType {static}
|
|
+ values() : FruitType[] {static}
|
|
}
|
|
class FruitBowl {
|
|
- fruit : List<Fruit>
|
|
+ FruitBowl()
|
|
+ countFruit() : int
|
|
+ put(f : Fruit)
|
|
+ take() : Fruit
|
|
+ toString() : String
|
|
}
|
|
class FruitShop {
|
|
- available : boolean[]
|
|
- bowls : FruitBowl[]
|
|
- semaphore : Semaphore
|
|
+ FruitShop()
|
|
+ countFruit() : int
|
|
+ returnBowl(bowl : FruitBowl)
|
|
+ takeBowl() : FruitBowl
|
|
}
|
|
interface Lock {
|
|
+ acquire() {abstract}
|
|
+ release() {abstract}
|
|
}
|
|
class Semaphore {
|
|
- counter : int
|
|
- licenses : int
|
|
+ Semaphore(licenses : int)
|
|
+ acquire()
|
|
+ getAvailableLicenses() : int
|
|
+ getNumLicenses() : int
|
|
+ release()
|
|
}
|
|
}
|
|
FruitType ..+ Fruit
|
|
Fruit --> "-type" FruitType
|
|
FruitShop --> "-semaphore" Semaphore
|
|
FruitBowl --> "-fruit" Fruit
|
|
Semaphore ..|> Lock
|
|
@enduml |