[GO] [Viererbande] Design Pattern Learning - Beobachter

Beobachter-Beobachter

** Inhaltsverzeichnis ** Mit diesem Muster können andere Objekte, die es überwachen, gleichzeitig etwas tun, wenn die Eigenschaften eines Objekts aktualisiert werden.

Es ist ein Bild, das das überwachte Objekt benachrichtigt, dass das aktualisierte Objekt aktualisiert wurde. Live-Daten von Android-Architekturkomponenten sind genau das.

Zweck

Definieren Sie eine Eins-zu-Viele-Abhängigkeit zwischen Objekten, damit alle abhängigen Objekte automatisch benachrichtigt und aktualisiert werden, wenn sich der Status eines Objekts ändert.

Komponente

-Subjekt Beobachtete abstrakte Klasse -Observer Abstrakte Klasse, die Sie überwachen möchten ・ ConcreteSubject Die zu überwachende Betonklasse -ConcreteObserver Die konkrete Klasse, die Sie überwachen möchten

Implementierung

Wir werden ein Beispielprogramm implementieren, das automatisch aktualisiert wird, wenn die auf dem Smartphone installierte Anwendung aktualisiert wird. Der Play Store ist das Thema und das Smartphone ist der Beobachter. Ich implementiere keine abstrakten Klassen, weil es nervt.

ConcreteSubject Die zu überwachende Betonklasse

Es ist ein Spielladen.

PlayStore.kt


package observer

class PlayStore {
    interface UpdateListener {
        fun update(latestVersion: Int)
    }

    private val listeners = ArrayList<UpdateListener>()

    fun update(latestVersion: Int) {
        println("Beispiel App${latestVersion}Es wurde aktualisiert auf.")
        listeners.forEach {
            it.update(latestVersion)
        }
    }

    fun addListener(listener: UpdateListener) {
        listeners.add(listener)
    }
}

ConcreteObserver Die konkrete Klasse, die Sie überwachen möchten

Implementieren Sie zwei zu beobachtende Klassen, damit Sie die Wirkung dieses Musters leicht spüren können.

Erster Benutzer, der die Beispiel-App installiert hat

SnakeSmartPhone.kt


package observer

class SnakeSmartPhone(playStore: PlayStore) {
    init {
        playStore.addListener(object: PlayStore.UpdateListener {
            override fun update(latestVersion: Int) {
                println("Snakes Smartphone-App${latestVersion}Das Beispiel wurde auf aktualisiert.")
            }
        })
    }
}

Zweiter Benutzer mit installierter Beispiel-App

Raiden.kt


package observer

class RaidenSmartPhone(playStore: PlayStore) {
    init {
        playStore.addListener(object: PlayStore.UpdateListener {
            override fun update(latestVersion: Int) {
                println("Raidens Smartphone-Beispiel-App${latestVersion}Es wurde aktualisiert auf.")
            }
        })
    }
}

Menschen, die verwenden

Client.kt


package observer

class Client {
    init {
        val playStore = PlayStore()
        SnakeSmartPhone(playStore)
        RaidenSmartPhone(playStore)

        playStore.update(1)

        playStore.update(2)
    }
}

Ausgabeergebnis

[out-put]
Die Beispiel-App wurde auf 1 aktualisiert.
Die Smartphone-Beispiel-App von Snake wurde auf 1 aktualisiert.
Raidens Smartphone-Beispiel-App wurde auf 1 aktualisiert.
Die Beispiel-App wurde auf 2 aktualisiert.
Die Smartphone-Beispiel-App von Snake wurde auf 2 aktualisiert.
Raidens Smartphone-Beispiel-App wurde auf 2 aktualisiert.

Jedes Mal, wenn Sie die Play Store-App aktualisieren, wird das Smartphone, auf dem sie installiert ist, automatisch aktualisiert.

das ist alles

Recommended Posts

[Viererbande] Design Pattern Learning - Beobachter
[Viererbande] Designmuster lernen
[Viererbande] Design Pattern Learning - Singleton
[Viererbande] Design Pattern Learning --Decorator
[Viererbande] Design Pattern Learning - Vermittler
[Viererbande] Designmusterlernen --Iterator
[Viererbande] Designmuster lernen - Fassade
[Viererbande] Design Pattern Learning - Composite
[Viererbande] Designmuster lernen - Prototyp
[Viererbande] Designmuster lernen - Andenken
[Viererbande] Designmuster lernen - Staat
[Vierergruppe] Design Pattern Learning - Interpreter
[Viererbande] Design Pattern Learning - Builder
[Viererbande] Designmuster lernen - Brücke
[Viererbande] Designmuster lernen --Proxy
[Viererbande] Design Pattern Learning - Strategie
[Viererbande] Designmuster lernen --Adapter
[Viererbande] Designmuster lernen - Befehl
[Viererbande] Designmusterlernen - Abstract Factory
[Viererbande] Designmuster lernen - Fabrikmethode
[Viererbande] Designmuster lernen - Kette der Verantwortung
[Viererbande] Design Pattern Learning - Template-Methode
Entwurfsmuster #Observer
Lernen Sie das Entwurfsmuster "Observer" in Python
Entwurfsmuster #Builder
Entwurfsmuster #Adapter
Entwurfsmuster #Decorator
Entwurfsmuster #Facade
Entwurfsmuster #Strategie
Entwurfsmuster #Singleton
Entwurfsmuster #Proxy
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python
Beobachtermuster in Java
Entwurfsmuster #Factory-Methode
Deep Learning 1 Übung des Deep Learning
Entwurfsmuster # Template-Methode
Beispielquelle für das von Java, PHP, Python realisierte Observer-Muster
Die Geschichte, dass GoF-Designmuster nichts anderes sind als "Einführung abstrakter Ebenen"