From e3afc04164807ecf3c7c1bfe5ae70e984aea1c27 Mon Sep 17 00:00:00 2001 From: frnlpz Date: Sun, 7 May 2017 03:27:29 +0200 Subject: [PATCH 1/2] New observer implementation --- src/main/kotlin/oop/Observer2/CategoryObserver.kt | 11 +++++++++++ src/main/kotlin/oop/Observer2/Observer.kt | 6 ++++++ src/main/kotlin/oop/Observer2/Player.kt | 9 +++++++++ src/main/kotlin/oop/Observer2/Roulette.kt | 12 ++++++++++++ 4 files changed, 38 insertions(+) create mode 100644 src/main/kotlin/oop/Observer2/CategoryObserver.kt create mode 100644 src/main/kotlin/oop/Observer2/Observer.kt create mode 100644 src/main/kotlin/oop/Observer2/Player.kt create mode 100644 src/main/kotlin/oop/Observer2/Roulette.kt diff --git a/src/main/kotlin/oop/Observer2/CategoryObserver.kt b/src/main/kotlin/oop/Observer2/CategoryObserver.kt new file mode 100644 index 0000000..8c0b15f --- /dev/null +++ b/src/main/kotlin/oop/Observer2/CategoryObserver.kt @@ -0,0 +1,11 @@ +package oop.Observer2 + +class CategoryObserver : Observer { + override val list = mutableListOf() + + override fun onChange(newValue: String){ + list.forEachIndexed { _, player -> + player.notify(newValue) + } + } +} diff --git a/src/main/kotlin/oop/Observer2/Observer.kt b/src/main/kotlin/oop/Observer2/Observer.kt new file mode 100644 index 0000000..a43baac --- /dev/null +++ b/src/main/kotlin/oop/Observer2/Observer.kt @@ -0,0 +1,6 @@ +package oop.Observer2 + +interface Observer{ + val list: MutableList + 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..d431cf7 --- /dev/null +++ b/src/main/kotlin/oop/Observer2/Player.kt @@ -0,0 +1,9 @@ +package oop.Observer2 + + +data class Player (val name: String, + var currentCategory: String = "history"){ + fun notify(newCategory: String){ + println("$name: category changed to $newCategory") + } +} diff --git a/src/main/kotlin/oop/Observer2/Roulette.kt b/src/main/kotlin/oop/Observer2/Roulette.kt new file mode 100644 index 0000000..15b7942 --- /dev/null +++ b/src/main/kotlin/oop/Observer2/Roulette.kt @@ -0,0 +1,12 @@ +package oop.Observer2 + +import kotlin.properties.Delegates + +class Roulette{ + + var observer: CategoryObserver? = null + + var newCategory: String by Delegates.observable("") { _, _, new -> + observer?.onChange(new) + } +} From 9ce54a1631ed033fa80118f825f0318ed0fef91b Mon Sep 17 00:00:00 2001 From: Cotel Date: Sun, 7 May 2017 09:50:17 +0200 Subject: [PATCH 2/2] Some changes to @frnlpz Observable --- .../kotlin/oop/Observer2/CategoryObserver.kt | 11 ---------- src/main/kotlin/oop/Observer2/Observer.kt | 3 +-- src/main/kotlin/oop/Observer2/Player.kt | 8 +++++--- src/main/kotlin/oop/Observer2/Roulette.kt | 12 ----------- .../oop/Observer2/RouletteObservable.kt | 20 +++++++++++++++++++ 5 files changed, 26 insertions(+), 28 deletions(-) delete mode 100644 src/main/kotlin/oop/Observer2/CategoryObserver.kt delete mode 100644 src/main/kotlin/oop/Observer2/Roulette.kt create mode 100644 src/main/kotlin/oop/Observer2/RouletteObservable.kt diff --git a/src/main/kotlin/oop/Observer2/CategoryObserver.kt b/src/main/kotlin/oop/Observer2/CategoryObserver.kt deleted file mode 100644 index 8c0b15f..0000000 --- a/src/main/kotlin/oop/Observer2/CategoryObserver.kt +++ /dev/null @@ -1,11 +0,0 @@ -package oop.Observer2 - -class CategoryObserver : Observer { - override val list = mutableListOf() - - override fun onChange(newValue: String){ - list.forEachIndexed { _, player -> - player.notify(newValue) - } - } -} diff --git a/src/main/kotlin/oop/Observer2/Observer.kt b/src/main/kotlin/oop/Observer2/Observer.kt index a43baac..7c5321d 100644 --- a/src/main/kotlin/oop/Observer2/Observer.kt +++ b/src/main/kotlin/oop/Observer2/Observer.kt @@ -1,6 +1,5 @@ package oop.Observer2 -interface Observer{ - val list: MutableList +interface Observer { fun onChange(newValue: T) } diff --git a/src/main/kotlin/oop/Observer2/Player.kt b/src/main/kotlin/oop/Observer2/Player.kt index d431cf7..27b91e2 100644 --- a/src/main/kotlin/oop/Observer2/Player.kt +++ b/src/main/kotlin/oop/Observer2/Player.kt @@ -2,8 +2,10 @@ package oop.Observer2 data class Player (val name: String, - var currentCategory: String = "history"){ - fun notify(newCategory: String){ - println("$name: category changed to $newCategory") + 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/Roulette.kt b/src/main/kotlin/oop/Observer2/Roulette.kt deleted file mode 100644 index 15b7942..0000000 --- a/src/main/kotlin/oop/Observer2/Roulette.kt +++ /dev/null @@ -1,12 +0,0 @@ -package oop.Observer2 - -import kotlin.properties.Delegates - -class Roulette{ - - var observer: CategoryObserver? = null - - var newCategory: String by Delegates.observable("") { _, _, new -> - observer?.onChange(new) - } -} 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) + } +}