Voici un résumé du ** modèle Memento ** dans le modèle de conception du GoF.
C'est un programme qui change votre argent et vos effets personnels (fruits) en fonction du jet de dés que vous avez lancé. Enregistrez ou annulez selon la situation.
C'est la classe du personnage principal qui joue au jeu. Créez une instance de 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 = {
"Pomme", "Grain de raisin", "banane", "Mandarine",
};
public Gamer(int money) {
this.money = money;
}
public int getMoney() {
return money;
}
//Pari ... progression du jeu
public void bet() {
//Lancer les dés
int dice = random.nextInt(6) + 1;
if (dice == 1) {
//1er ... Votre argent augmentera
money += 100;
System.out.println("Le montant d'argent que j'ai a augmenté.");
} else if (dice == 2) {
//2ème ... la moitié de votre argent
money /= 2;
System.out.println("Votre argent a été réduit de moitié.");
} else if (dice == 6) {
//6 yeux ... obtenez des fruits
String f = getFruit();
System.out.println("des fruits(" + f + ")j'ai eu");
fruits.add(f);
} else {
//A part ça ... rien ne se passe
System.out.println("Rien ne s'est passé.");
}
}
//Prenez un instantané
public Memento createMemento() {
Memento m = new Memento(money);
Iterator it = fruits.iterator();
while (it.hasNext()) {
String f = (String) it.next();
if (f.startsWith("Délicieux")) {
//Ne gardez que de délicieux fruits
m.addFruit(f);
}
}
return m;
}
//Annuler
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 = "Délicieux";
}
return prefix + fruitsname[random.nextInt(fruitsname.length)];
}
}
Une classe qui représente l'état de Geme.
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();
}
}
Cette classe effectue le traitement principal. Faites avancer le jeu. Il enregistre également une instance de Memento et restaure l'état du joueur si nécessaire.
Main.java
import game.Gamer;
import game.Memento;
public class Main {
public static void main(String[] args) {
//La première possession est de 100
Gamer gamer = new Gamer(100);
//Sauvegarder l'état initial
Memento memento = gamer.createMemento();
for (int i = 0; i < 10; i++) {
System.out.println("==== " + i);
System.out.println("Statut actuel:" + gamer);
//Faites avancer le jeu
gamer.bet();
System.out.println("L'argent que tu as" + gamer.getMoney() + "C'est devenu un cercle.");
if (gamer.getMoney() > memento.getMoney()) {
System.out.println("(Comme il a beaucoup augmenté, sauvegardons l'état actuel)");
memento = gamer.createMemento();
} else if (gamer.getMoney() < memento.getMoney() / 2) {
System.out.println("(Il a beaucoup diminué, revenons donc à l'état précédent)");
gamer.restoreMemento(memento);
}
}
}
}
==== 0
Statut actuel:[money = 100, fruits = []]
des fruits(Délicieuse banane)j'ai eu
L'argent que j'ai est maintenant de 100 yens.
==== 1
Statut actuel:[money = 100, fruits = [Délicieuse banane]]
Le montant d'argent que j'ai a augmenté.
L'argent que j'ai est maintenant de 200 yens.
(Comme il a beaucoup augmenté, sauvegardons l'état actuel)
==== 2
Statut actuel:[money = 200, fruits = [Délicieuse banane]]
Rien ne s'est passé.
L'argent que j'ai est maintenant de 200 yens.
==== 3
Statut actuel:[money = 200, fruits = [Délicieuse banane]]
Le montant d'argent que j'ai a augmenté.
L'argent que j'ai est maintenant de 300 yens.
(Comme il a beaucoup augmenté, sauvegardons l'état actuel)
==== 4
Statut actuel:[money = 300, fruits = [Délicieuse banane]]
Rien ne s'est passé.
L'argent que j'ai est maintenant de 300 yens.
==== 5
Statut actuel:[money = 300, fruits = [Délicieuse banane]]
Votre argent a été réduit de moitié.
L'argent que j'ai est maintenant de 150 yens.
==== 6
Statut actuel:[money = 150, fruits = [Délicieuse banane]]
Rien ne s'est passé.
L'argent que j'ai est maintenant de 150 yens.
==== 7
Statut actuel:[money = 150, fruits = [Délicieuse banane]]
Le montant d'argent que j'ai a augmenté.
L'argent que j'ai est maintenant de 250 yens.
==== 8
Statut actuel:[money = 250, fruits = [Délicieuse banane]]
Votre argent a été réduit de moitié.
Le montant d'argent que j'ai est maintenant de 125 yens.
(Il a beaucoup diminué, revenons donc à l'état précédent)
==== 9
Statut actuel:[money = 300, fruits = [Délicieuse banane]]
Rien ne s'est passé.
L'argent que j'ai est maintenant de 300 yens.
Le modèle Memento vous permet ** d'annuler, de refaire, de créer un historique de travail, d'enregistrer l'état actuel **, etc. Si vous souhaitez annuler, vous vous demandez peut-être si vous devez créer cette fonction dans la classe Gamer. Dans la classe Main, nous décidons "quand prendre un instantané" et "quand annuler" et occupons le rôle de Memento. D'autre part, dans la classe Gamer, vous ferez le travail de création du rôle de Memento et le travail de retour de votre propre état en utilisant le rôle donné de Memento. Vous pouvez voir que les rôles sont répartis de cette manière entre la classe Main et la classe Gamer. Si vous divisez les rôles comme ça,
--Je veux changer pour annuler en plusieurs étapes --Je souhaite enregistrer l'état actuel dans un fichier et annuler
Même si vous souhaitez effectuer la correction, vous n'avez pas besoin de modifier le rôle de joueur.
Cet article et exemple de programme ont été créés à partir des livres suivants.
C'était très facile à comprendre et j'ai beaucoup appris. Je vous remercie. Les explications détaillées des modèles de conception et des exemples de programmes sont écrites, veuillez donc également consulter les livres.
Recommended Posts