diff --git a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/IObservable.kt b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/IObservable.kt new file mode 100644 index 0000000000..e896d55cf2 --- /dev/null +++ b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/IObservable.kt @@ -0,0 +1,18 @@ +package com.baeldung.observer + +import java.util.ArrayList + +interface IObservable { + val observers: ArrayList + fun add(observer: IObserver) { + observers.add(observer) + } + + fun remove(observer: IObserver) { + observers.remove(observer) + } + + fun sendUpdateEvent() { + observers.forEach { it.update() } + } +} \ No newline at end of file diff --git a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/IObserver.kt b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/IObserver.kt new file mode 100644 index 0000000000..e2187a9fcb --- /dev/null +++ b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/IObserver.kt @@ -0,0 +1,5 @@ +package com.baeldung.observer + +interface IObserver { + fun update() +} \ No newline at end of file diff --git a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/delegates/BaeldungNewsletter.kt b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/delegates/BaeldungNewsletter.kt new file mode 100644 index 0000000000..748c1064ff --- /dev/null +++ b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/delegates/BaeldungNewsletter.kt @@ -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) } + } +} \ No newline at end of file diff --git a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/delegates/BaeldungReader.kt b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/delegates/BaeldungReader.kt new file mode 100644 index 0000000000..f275648549 --- /dev/null +++ b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/delegates/BaeldungReader.kt @@ -0,0 +1,8 @@ +package com.baeldung.observer.delegates + +fun main() { + val newsletter = BaeldungNewsletter() + newsletter.newestArticleObservers.add { newestArticleUrl -> + println("New Baeldung article: ${newestArticleUrl}") + } +} \ No newline at end of file diff --git a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/standard/BaeldungNewsletter.kt b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/standard/BaeldungNewsletter.kt new file mode 100644 index 0000000000..0ec4796edb --- /dev/null +++ b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/standard/BaeldungNewsletter.kt @@ -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 = ArrayList() + var newestArticleUrl = "" + set(value) { + field = value + sendUpdateEvent() + } +} \ No newline at end of file diff --git a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/standard/BaeldungReader.kt b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/standard/BaeldungReader.kt new file mode 100644 index 0000000000..14e686f2f8 --- /dev/null +++ b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/standard/BaeldungReader.kt @@ -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}") + } +} \ No newline at end of file