[GO] [Gang of Four] Apprentissage des modèles de conception --Mémento

Memento - Continuez à regarder

Table des matières Memento est intéressant. C'est l'un de mes films préférés. memento.jpg

Ce film raconte l'histoire d'un homme qui n'a que 10 minutes de mémoire en raison d'un obstacle causé par un incident, luttant pour découvrir le mystère de l'incident et les circonstances dans lesquelles il se trouve actuellement. Il a inscrit sur son corps un événement important qu'il ne faut pas oublier car il ne dispose que de 10 minutes de mémoire, afin de s'informer 10 minutes plus tard.

Le motif a-t-il pour but de sauvegarder l'état de l'objet à un moment donné? Les membres privés sont essentiellement inaccessibles de l'extérieur. Cependant, je pense qu'il existe de nombreuses situations dans lesquelles vous souhaitez enregistrer l'état entier d'un objet particulier afin que divers logiciels puissent revenir complètement à l'état précédent avec les touches ctrl (ou commande) + z.

Je comprends que ce modèle est utilisé dans de tels cas. Il semble qu'il y avait un modèle de commande dans un modèle similaire ...

Objectif

Sans interrompre l'encapsulation, l'état interne de l'objet est capturé et externalisé afin que l'objet puisse être renvoyé à cet état ultérieurement.

Composant

・ Memento Une classe qui enregistre l'état d'un objet -Originateur Un objet pour lequel vous souhaitez enregistrer l'état à un certain moment. Créez un objet memento et utilisez l'objet memento pour le restaurer. · Coffre-fort d’objets Gardien Memento

la mise en oeuvre

Implémentez un exemple de programme qui ressemble à la création de données de sauvegarde de jeu.

Memento Une classe qui enregistre l'état d'un objet

Enregistrer la classe de données Enregistrez une capture de votre niveau, de votre argent et de votre expérience à tout moment.

SaveData.kt


package memento

class SaveData(val level: Int, val gold: Int, val point: Int) {
    fun show() {
        println("niveau:$niveau Possession:$Expérience d'or:$point")
    }
}

Originator Un objet dont vous souhaitez enregistrer l'état à un moment donné. Créez un objet memento et utilisez l'objet memento pour le restaurer.

Informations en cours de lecture

Game.kt


package memento

class Game(private var level: Int, private var gold: Int, private var point: Int) {

    fun show() {
        println("niveau:$niveau Possession:$Expérience d'or:$point")
    }

    /**
     *Vaincu l'ennemi
     */
    fun enemyDown(enemyLevel: Int) {
        point += enemyLevel

        if (point >= 10) {
            level += point / 10
            point %= 10
        }

        gold += enemyLevel
    }

    /**
     *Obtenir l'état actuel
     */
    fun getData(): SaveData {
        return SaveData(level, gold, point)
    }
}

Coffre-fort d'objets Memento de gardien

MemoryCard.kt


package memento

class MemoryCard {
    private val memory = ArrayList<SaveData>()

    /**
     *sauvegarder
     */
    fun save(data: SaveData) {
        memory.add(data)
    }

    /**
     *Charger (restaurer)
     */
    fun load(index: Int): Game {
        val data = memory[index]
        return Game(data.level, data.gold, data.point)
    }
}

Les personnes qui utilisent

Client.kt


package memento

class Client {
    init {
        //Fait référence à une carte mémoire
        val memoryCard = MemoryCard()

        //Début du jeu
        var game = Game(1, 0, 0)
        //Vaincre l'ennemi
        game.enemyDown(1)
        game.enemyDown(5)
        game.enemyDown(6)

        //enregistrer
        memoryCard.save(game.getData())

        //État actuel
        game.show()

        //Vaincre l'ennemi
        game.enemyDown(4)
        game.enemyDown(2)
        game.enemyDown(8)

        //enregistrer
        memoryCard.save(game.getData())

        //État actuel
        game.show()

        //Revenir à l'état enregistré à l'origine car il y avait un élément que vous n'avez pas pu acquérir
        game = memoryCard.load(0)

        //État actuel
        game.show()
    }
}

Résultat de sortie

[out-put]
Niveau: 2 Possession: 12 Expérience: 2
Niveau: 3 Possession: 26 Expérience: 6
Niveau: 2 Possession: 12 Expérience: 2

c'est tout

Recommended Posts

[Gang of Four] Apprentissage des modèles de conception --Mémento
[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 - Visiteur
[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 - É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 --Observer
[Gang of Four] Apprentissage des modèles de conception - Commande
[Gang of Four] Apprentissage des modèles de conception - Poids du vol
[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èles Gang of Four (GoF) en Python
Modèle de conception #Builder
Modèle de conception #Adapter
Modèle de conception #Decorator
Apprentissage de la reconnaissance de formes en vidéo Partie 1 Champ de reconnaissance de formes
Modèle de conception #Observer
Modèle de conception #Singleton
Modèle de conception #Proxy
Apprenez le modèle de conception «Chaîne de responsabilité» en Python
Design Pattern #Factory, méthode
L'histoire selon laquelle les modèles de conception du GoF ne sont rien de plus qu'une «introduction de couches abstraites»