commit
33601cc191
|
@ -0,0 +1,18 @@
|
||||||
|
package com.baeldung.observer
|
||||||
|
|
||||||
|
import java.util.ArrayList
|
||||||
|
|
||||||
|
interface IObservable {
|
||||||
|
val observers: ArrayList<IObserver>
|
||||||
|
fun add(observer: IObserver) {
|
||||||
|
observers.add(observer)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun remove(observer: IObserver) {
|
||||||
|
observers.remove(observer)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun sendUpdateEvent() {
|
||||||
|
observers.forEach { it.update() }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
package com.baeldung.observer
|
||||||
|
|
||||||
|
interface IObserver {
|
||||||
|
fun update()
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
package com.baeldung.observer.delegates
|
||||||
|
|
||||||
|
import kotlin.properties.Delegates
|
||||||
|
|
||||||
|
class BaeldungNewsletter {
|
||||||
|
val newestArticleObservers = mutableListOf<(String) -> Unit>()
|
||||||
|
var newestArticleUrl: String by Delegates.observable("") { _, _, newValue ->
|
||||||
|
newestArticleObservers.forEach { it(newValue) }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.baeldung.observer.delegates
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val newsletter = BaeldungNewsletter()
|
||||||
|
newsletter.newestArticleObservers.add { newestArticleUrl ->
|
||||||
|
println("New Baeldung article: ${newestArticleUrl}")
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package com.baeldung.observer.standard
|
||||||
|
|
||||||
|
import com.baeldung.observer.IObservable
|
||||||
|
import com.baeldung.observer.IObserver
|
||||||
|
import java.util.ArrayList
|
||||||
|
|
||||||
|
class BaeldungNewsletter : IObservable {
|
||||||
|
override val observers: ArrayList<IObserver> = ArrayList()
|
||||||
|
var newestArticleUrl = ""
|
||||||
|
set(value) {
|
||||||
|
field = value
|
||||||
|
sendUpdateEvent()
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
package com.baeldung.observer.standard
|
||||||
|
|
||||||
|
import com.baeldung.observer.IObserver
|
||||||
|
|
||||||
|
class BaeldungReader(private var newsletter: BaeldungNewsletter) : IObserver {
|
||||||
|
override fun update() {
|
||||||
|
println("New Baeldung article: ${newsletter.newestArticleUrl}")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue