Hier ist eine Zusammenfassung des ** Erinnerungsmusters ** im GoF-Entwurfsmuster.
Es ist ein Programm, das Ihr Geld und Ihre Habseligkeiten (Obst) entsprechend dem Würfelwurf ändert, den Sie gewürfelt haben. Speichern oder rückgängig machen, je nach Situation.
Dies ist die Klasse des Hauptcharakters, der das Spiel spielt. Erstellen Sie eine Instanz von Memento.
Gamer.java
package game;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;
public class Gamer {
private int money;
private ArrayList<String> fruits = new ArrayList<String>();
private Random random = new Random();
private static String[] fruitsname = {
"Apfel", "Traube", "Banane", "Mandarine",
};
public Gamer(int money) {
this.money = money;
}
public int getMoney() {
return money;
}
//Wette ... Spielfortschritt
public void bet() {
//Würfeln
int dice = random.nextInt(6) + 1;
if (dice == 1) {
//1. ... Ihr Geld wird steigen
money += 100;
System.out.println("Der Geldbetrag, den ich habe, hat zugenommen.");
} else if (dice == 2) {
//2. ... die Hälfte Ihres Geldes
money /= 2;
System.out.println("Ihr Geld wurde halbiert.");
} else if (dice == 6) {
//6 Augen ... Früchte bekommen
String f = getFruit();
System.out.println("Früchte(" + f + ")ich habe");
fruits.add(f);
} else {
//Sonst passiert nichts
System.out.println("Nichts ist passiert.");
}
}
//Mach einen Schnappschuss
public Memento createMemento() {
Memento m = new Memento(money);
Iterator it = fruits.iterator();
while (it.hasNext()) {
String f = (String) it.next();
if (f.startsWith("Köstlich")) {
//Speichern Sie nur köstliche Früchte
m.addFruit(f);
}
}
return m;
}
//Rückgängig machen
public void restoreMemento(Memento memento) {
this.money = memento.money;
this.fruits = memento.getFruits();
}
public String toString() {
return "[money = " + money + ", fruits = " + fruits + "]";
}
private String getFruit() {
String prefix = "";
if (random.nextBoolean()) {
prefix = "Köstlich";
}
return prefix + fruitsname[random.nextInt(fruitsname.length)];
}
}
Eine Klasse, die den Staat Geme darstellt.
Memento.java
package game;
import java.util.ArrayList;
public class Memento {
int money;
ArrayList<String> fruits;
public int getMoney() {
return money;
}
Memento(int money) {
this.money = money;
this.fruits = new ArrayList<String>();
}
void addFruit(String fruit) {
fruits.add(fruit);
}
ArrayList<String> getFruits() {
return (ArrayList<String>) fruits.clone();
}
}
Diese Klasse führt die Hauptverarbeitung durch. Das Spiel vorantreiben. Es speichert auch eine Instanz von Memento und stellt bei Bedarf den Gamer-Status wieder her.
Main.java
import game.Gamer;
import game.Memento;
public class Main {
public static void main(String[] args) {
//Erster Besitz ist 100
Gamer gamer = new Gamer(100);
//Speichern Sie den Ausgangszustand
Memento memento = gamer.createMemento();
for (int i = 0; i < 10; i++) {
System.out.println("==== " + i);
System.out.println("Aktueller Status:" + gamer);
//Das Spiel vorantreiben
gamer.bet();
System.out.println("Das Geld, das du hast" + gamer.getMoney() + "Es wurde ein Kreis.");
if (gamer.getMoney() > memento.getMoney()) {
System.out.println("(Da es stark zugenommen hat, speichern wir den aktuellen Status.)");
memento = gamer.createMemento();
} else if (gamer.getMoney() < memento.getMoney() / 2) {
System.out.println("(Es hat stark abgenommen, also kehren wir zum vorherigen Zustand zurück.)");
gamer.restoreMemento(memento);
}
}
}
}
==== 0
Aktueller Status:[money = 100, fruits = []]
Früchte(Leckere Banane)ich habe
Das Geld, das ich habe, ist jetzt 100 Yen.
==== 1
Aktueller Status:[money = 100, fruits = [Leckere Banane]]
Der Geldbetrag, den ich habe, hat zugenommen.
Das Geld, das ich habe, ist jetzt 200 Yen.
(Da es stark zugenommen hat, speichern wir den aktuellen Status.)
==== 2
Aktueller Status:[money = 200, fruits = [Leckere Banane]]
Nichts ist passiert.
Das Geld, das ich habe, ist jetzt 200 Yen.
==== 3
Aktueller Status:[money = 200, fruits = [Leckere Banane]]
Der Geldbetrag, den ich habe, hat zugenommen.
Das Geld, das ich habe, ist jetzt 300 Yen.
(Da es stark zugenommen hat, speichern wir den aktuellen Status.)
==== 4
Aktueller Status:[money = 300, fruits = [Leckere Banane]]
Nichts ist passiert.
Das Geld, das ich habe, ist jetzt 300 Yen.
==== 5
Aktueller Status:[money = 300, fruits = [Leckere Banane]]
Ihr Geld wurde halbiert.
Das Geld, das ich habe, ist jetzt 150 Yen.
==== 6
Aktueller Status:[money = 150, fruits = [Leckere Banane]]
Nichts ist passiert.
Das Geld, das ich habe, ist jetzt 150 Yen.
==== 7
Aktueller Status:[money = 150, fruits = [Leckere Banane]]
Der Geldbetrag, den ich habe, hat zugenommen.
Das Geld, das ich habe, ist jetzt 250 Yen.
==== 8
Aktueller Status:[money = 250, fruits = [Leckere Banane]]
Ihr Geld wurde halbiert.
Der Geldbetrag, den ich habe, beträgt jetzt 125 Yen.
(Es hat stark abgenommen, also kehren wir zum vorherigen Zustand zurück.)
==== 9
Aktueller Status:[money = 300, fruits = [Leckere Banane]]
Nichts ist passiert.
Das Geld, das ich habe, ist jetzt 300 Yen.
Mit dem Memento-Muster können Sie ** rückgängig machen, wiederholen, Arbeitsverlauf erstellen, aktuellen Status speichern ** und vieles mehr. Wenn Sie rückgängig machen möchten, fragen Sie sich möglicherweise, ob Sie diese Funktion in der Gamer-Klasse erstellen sollten. In der Hauptklasse entscheiden Sie, wann Sie einen Schnappschuss machen und wann Sie rückgängig machen möchten, und übernehmen die Rolle des Erinnerungsstücks. Auf der anderen Seite erledigen Sie in der Gamer-Klasse die Aufgabe, die Rolle des Memento zu erstellen und Ihren eigenen Status unter Verwendung der angegebenen Rolle des Memento wiederherzustellen. Sie können sehen, dass die Rollen auf diese Weise zwischen der Hauptklasse und der Gamer-Klasse aufgeteilt sind. Wenn Sie die Rollen wie folgt aufteilen,
Selbst wenn Sie die Korrektur vornehmen möchten, müssen Sie die Gamer-Rolle nicht ändern.
Dieser Artikel und das Beispielprogramm wurden basierend auf den folgenden Büchern erstellt.
Es war sehr leicht zu verstehen und ich habe viel gelernt. Vielen Dank. Die detaillierten Erklärungen zu den Entwurfsmustern und Beispielprogrammen sind geschrieben. Schauen Sie sich also auch die Bücher an.
Recommended Posts