[GO] [Viererbande] Designmuster lernen - Andenken

Memento - Beobachten Sie weiter

Inhaltsverzeichnis Andenken ist interessant. Es ist einer meiner Lieblingsfilme. memento.jpg

Dieser Film handelt von einem Mann, der aufgrund eines durch einen Vorfall verursachten Hindernisses nur 10 Minuten Gedächtnis hat und Schwierigkeiten hat, das Geheimnis des Vorfalls und die Umstände herauszufinden, unter denen er sich derzeit befindet. Er schrieb ein wichtiges Ereignis in seinen Körper, das er nicht vergessen sollte, da er nur 10 Minuten Gedächtnis hat, um sich 10 Minuten später zu informieren.

Ist der Zweck des Musters, den Zustand des Objekts zu einem bestimmten Zeitpunkt zu speichern? Private Mitglieder sind grundsätzlich von außen nicht zugänglich. Ich denke jedoch, dass es viele Situationen gibt, in denen Sie den gesamten Status eines bestimmten Objekts speichern möchten, damit verschiedene Software mit Strg (oder Befehl) + Z-Tasten vollständig zum vorherigen Status zurückkehren können.

Ich verstehe, dass dieses Muster in solchen Fällen verwendet wird. Es scheint, dass es ein Befehlsmuster in einem ähnlichen Muster gab ...

Zweck

Ohne die Kapselung zu unterbrechen, wird der interne Zustand des Objekts erfasst und ausgelagert, damit das Objekt später in diesen Zustand zurückversetzt werden kann.

Komponente

・ Memento Eine Klasse, die den Status eines Objekts speichert -Originator Ein Objekt, für das Sie den Status zu einem bestimmten Zeitpunkt speichern möchten. Erstellen Sie ein Erinnerungsobjekt und stellen Sie es mit dem Erinnerungsobjekt wieder her. · Hausmeister Memento Objekttresor

Implementierung

Implementieren Sie ein Beispielprogramm, mit dem Sie Spielspeicherdaten erstellen möchten.

Memento Eine Klasse, die den Status eines Objekts speichert

Datenklasse speichern Speichern Sie jederzeit eine Erfassung Ihres Levels, Geldes und Ihrer Erfahrung.

SaveData.kt


package memento

class SaveData(val level: Int, val gold: Int, val point: Int) {
    fun show() {
        println("Niveau:$Level Besitz:$Gold Erfahrung:$point")
    }
}

Urheber Ein Objekt, dessen Status Sie zu einem bestimmten Zeitpunkt speichern möchten. Erstellen Sie ein Erinnerungsobjekt und stellen Sie es mit dem Erinnerungsobjekt wieder her.

Informationen werden gerade abgespielt

Game.kt


package memento

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

    fun show() {
        println("Niveau:$Level Besitz:$Gold Erfahrung:$point")
    }

    /**
     *Besiegte den Feind
     */
    fun enemyDown(enemyLevel: Int) {
        point += enemyLevel

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

        gold += enemyLevel
    }

    /**
     *Aktuellen Status abrufen
     */
    fun getData(): SaveData {
        return SaveData(level, gold, point)
    }
}

Hausmeister Memento Objekttresor

MemoryCard.kt


package memento

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

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

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

Menschen, die verwenden

Client.kt


package memento

class Client {
    init {
        //Bezieht sich auf eine Speicherkarte
        val memoryCard = MemoryCard()

        //Spielbeginn
        var game = Game(1, 0, 0)
        //Besiege den Feind
        game.enemyDown(1)
        game.enemyDown(5)
        game.enemyDown(6)

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

        //Aktuellen Zustand
        game.show()

        //Besiege den Feind
        game.enemyDown(4)
        game.enemyDown(2)
        game.enemyDown(8)

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

        //Aktuellen Zustand
        game.show()

        //Kehren Sie zum ursprünglich gespeicherten Status zurück, da Sie einen Artikel nicht erworben haben
        game = memoryCard.load(0)

        //Aktuellen Zustand
        game.show()
    }
}

Ausgabeergebnis

[out-put]
Level: 2 Besitz: 12 Erfahrung: 2
Level: 3 Besitz: 26 Erfahrung: 6
Level: 2 Besitz: 12 Erfahrung: 2

das ist alles

Recommended Posts

[Viererbande] Designmuster lernen - Andenken
[Viererbande] Designmuster lernen
[Viererbande] Design Pattern Learning - Singleton
[Viererbande] Design Pattern Learning --Decorator
[Viererbande] Designmuster lernen --Besucher
[Viererbande] Design Pattern Learning - Vermittler
[Viererbande] Designmusterlernen --Iterator
[Viererbande] Designmuster lernen - Fassade
[Viererbande] Design Pattern Learning - Composite
[Viererbande] Designmuster lernen - Prototyp
[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] Design Pattern Learning - Beobachter
[Viererbande] Designmuster lernen - Befehl
[Viererbande] Designmuster lernen - Fluggewicht
[Viererbande] Designmusterlernen - Abstract Factory
[Viererbande] Designmuster lernen - Fabrikmethode
[Viererbande] Designmuster lernen - Kette der Verantwortung
[Viererbande] Design Pattern Learning - Template-Methode
Gang of Four (GoF) -Muster in Python
Entwurfsmuster #Builder
Entwurfsmuster #Adapter
Entwurfsmuster #Decorator
Lernen der Mustererkennung im Video Teil 1 Bereich der Mustererkennung
Entwurfsmuster #Observer
Entwurfsmuster #Singleton
Entwurfsmuster #Proxy
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python
Entwurfsmuster #Factory-Methode
Die Geschichte, dass GoF-Designmuster nichts anderes sind als "Einführung abstrakter Ebenen"