diff --git a/src/main/kotlin/oop/Observer2/Observer.kt b/src/main/kotlin/oop/Observer2/Observer.kt new file mode 100644 index 0000000..7c5321d --- /dev/null +++ b/src/main/kotlin/oop/Observer2/Observer.kt @@ -0,0 +1,5 @@ +package oop.Observer2 + +interface Observer { + fun onChange(newValue: T) +} diff --git a/src/main/kotlin/oop/Observer2/Player.kt b/src/main/kotlin/oop/Observer2/Player.kt new file mode 100644 index 0000000..27b91e2 --- /dev/null +++ b/src/main/kotlin/oop/Observer2/Player.kt @@ -0,0 +1,11 @@ +package oop.Observer2 + + +data class Player (val name: String, + var currentCategory: String = "history") : Observer { + + override fun onChange(newValue: String) { + currentCategory = newValue + println("New category is $newValue") + } +} diff --git a/src/main/kotlin/oop/Observer2/RouletteObservable.kt b/src/main/kotlin/oop/Observer2/RouletteObservable.kt new file mode 100644 index 0000000..ab65deb --- /dev/null +++ b/src/main/kotlin/oop/Observer2/RouletteObservable.kt @@ -0,0 +1,20 @@ +package oop.Observer2 + +import kotlin.properties.Delegates + +class RouletteObservable { + + private val observers = mutableListOf>() + + var newCategory: String by Delegates.observable("") { _, _, new -> + observers.forEach { it.onChange(new) } + } + + fun addObserver(observer: Observer) { + observers.add(observer) + } + + fun removeObserver(observer: Observer) { + observers.remove(observer) + } +}