[GO] [Gang of Four] Apprentissage des modèles de conception --Observer

Observateur-Observateur

** Table des matières ** Ce modèle permet aux autres objets qui le surveillent de faire quelque chose en même temps lorsque les propriétés d'un objet sont mises à jour.

C'est comme une image qui notifie à l'objet surveillé que l'objet mis à jour a été mis à jour. Les données en direct des composants d'architecture Android sont exactement cela.

Objectif

Définissez une dépendance un-à-plusieurs entre les objets afin que lorsqu'un objet change d'état, tous les objets dépendants soient automatiquement notifiés et mis à jour.

Composant

-Subject Classe abstraite observée -Observer Classe abstraite que vous souhaitez surveiller ・ ConcreteSubject La classe de béton à surveiller -ConcreteObserver La classe concrète que vous souhaitez surveiller

la mise en oeuvre

Nous mettrons en œuvre un exemple de programme qui sera automatiquement mis à jour lors de la mise à jour de l'application installée sur le smartphone. Le play store est le sujet et le smartphone est l'observateur. Je n'implémente pas de classes abstraites parce que c'est ennuyeux.

ConcreteSubject La classe de béton à surveiller

C'est un magasin de jeux.

PlayStore.kt


package observer

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

    private val listeners = ArrayList<UpdateListener>()

    fun update(latestVersion: Int) {
        println("Exemple d'application${latestVersion}Il a été mis à jour en.")
        listeners.forEach {
            it.update(latestVersion)
        }
    }

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

ConcreteObserver La classe concrète que vous souhaitez surveiller

Implémentez deux classes à observer afin que vous puissiez facilement ressentir l'effet de ce modèle.

Premier utilisateur qui a installé l'exemple d'application

SnakeSmartPhone.kt


package observer

class SnakeSmartPhone(playStore: PlayStore) {
    init {
        playStore.addListener(object: PlayStore.UpdateListener {
            override fun update(latestVersion: Int) {
                println("Application pour smartphone de Snake${latestVersion}L'échantillon a été mis à jour en.")
            }
        })
    }
}

Deuxième utilisateur avec l'exemple d'application installé

Raiden.kt


package observer

class RaidenSmartPhone(playStore: PlayStore) {
    init {
        playStore.addListener(object: PlayStore.UpdateListener {
            override fun update(latestVersion: Int) {
                println("Exemple d'application pour smartphone de Raiden${latestVersion}Il a été mis à jour en.")
            }
        })
    }
}

Les personnes qui utilisent

Client.kt


package observer

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

        playStore.update(1)

        playStore.update(2)
    }
}

Résultat de sortie

[out-put]
L'exemple d'application a été mis à jour à 1.
L'exemple d'application pour smartphone de Snake a été mis à jour à 1.
L'exemple d'application pour smartphone de Raiden a été mis à jour à 1.
L'exemple d'application a été mis à jour vers 2.
L'exemple d'application pour smartphone de Snake a été mis à jour à 2.
L'exemple d'application pour smartphone de Raiden a été mis à jour à 2.

Chaque fois que vous mettez à jour l'application Play Store, le smartphone qui l'a installée est automatiquement mis à jour.

c'est tout

Recommended Posts

[Gang of Four] Apprentissage des modèles de conception --Observer
[Gang of Four] Apprentissage des modèles de conception
[Gang of Four] Apprentissage des modèles de conception --Singleton
[Gang of Four] Apprentissage des modèles de conception - Décorateur
[Gang of Four] Apprentissage des modèles de conception - Médiateur
[Gang of Four] Apprentissage des modèles de conception - Itérateur
[Gang of Four] Apprentissage des modèles de conception - Façade
[Gang of Four] Apprentissage des modèles de conception - Composite
[Gang of Four] Apprentissage des modèles de conception - Prototype
[Gang of Four] Apprentissage des modèles de conception --Mémento
[Gang of Four] Apprentissage des modèles de conception - État
[Gang of Four] Apprentissage des modèles de conception - Interprétation
[Gang of Four] Apprentissage des modèles de conception - Constructeur
[Gang of Four] Apprentissage des modèles de conception - Pont
[Gang of Four] Apprentissage des modèles de conception - Proxy
[Gang of Four] Apprentissage des modèles de conception - Stratégie
[Gang of Four] Apprentissage des modèles de conception - Adaptateur
[Gang of Four] Apprentissage des modèles de conception - Commande
[Gang of Four] Apprentissage des modèles de conception - Usine abstraite
[Gang of Four] Apprentissage des modèles de conception - Méthode d'usine
[Gang of Four] Apprentissage des modèles de conception - Chaîne de responsabilité
[Gang of Four] Apprentissage des modèles de conception - Méthode du modèle
Modèle de conception #Observer
Apprenez le modèle de conception "Observer" en Python
Modèle de conception #Builder
Modèle de conception #Adapter
Modèle de conception #Decorator
Modèle de conception #Facade
Modèle de conception #Strategy
Modèle de conception #Singleton
Modèle de conception #Proxy
Apprenez le modèle de conception «Chaîne de responsabilité» en Python
Modèle d'observateur en Java
Design Pattern #Factory, méthode
Deep learning 1 Pratique du deep learning
Design Pattern #Template, méthode
Exemple de source du modèle Observer réalisé par Java, PHP, Python
L'histoire selon laquelle les modèles de conception du GoF ne sont rien de plus qu'une «introduction de couches abstraites»