Cet article décrit l'utilisation du mode mémo pour implémenter les fonctions de jeu de niveau de niveau de Java. Partagez-le pour votre référence, comme suit:
1. Définition du modèle
Le mode mémo capture l'état interne d'un objet sans détruire l'enceinte et enregistre cet état en dehors de l'objet. De cette façon, l'objet peut être restauré à son état enregistré d'origine plus tard.
2. Exemples du modèle
Analyse du mode 1
Nous avons emprunté le jeu de niveau pour illustrer ce mode.
2 Diagramme de classe statique du mode Mémo
3 exemples de code (mode mémo noir))
3.1 Créer une interface étroite mémo inarrowMmento
package com.demo.Memento; / ** * Interface étroite du mémorandum (aucune méthode n'est fournie, les objets externes ne peuvent pas accéder aux informations internes de l'objet de mémorandum) * * @author * * / interface publique InArrowMemento {}3.2 Héros du sponsor du mémorandum
package com.demo.originator; import java.util.random; import com.demo.Mento.inarrowMemento; / ** * challenger * * @author * * / public classer héros {// Blood Value int private blood; // Force la valeur privée int épée; // Nombre aléatoire privé final aléatoire aléatoire = new random (); // Construire la méthode Initialiser le contenu public Hero () {this.blood = 100; this.sword = 100; } // Créer un mémorandum pour enregistrer le contenu public inArrowMmento CreateMemento () {System.out.println ("Créer un mémorandum ..."); retourner un nouveau memento (this.blood, this.sword); } // Restaurer le contenu du mémorandum public void restoreFrommento (inArrowMmento memento) {System.out.println ("Restaurer le statut dans le mémorandum ..."); if (memento! = null) {memento memento2 = (memento) memento; this.blood = memento2.getBlood (); this.word = memento2.getword (); }} / ** * Challenge Boss * / public int koboss () {// Lorsque la valeur sanguine est <= 0, le défi échoue. Supposons que la probabilité de vaincre le boss est de 2% // lors du jugement, il y a toujours une valeur sanguine si (this.blood <= 0 || this.sword <= 0) {System.out.println (this.toString ()); System.out.println ("Changer le boss a échoué!"); retour -1; } else {// Obtenez le numéro aléatoire double win = math.random (); if (win <= 0,02) {System.out.println (this.toString ()); System.out.println ("Félicitations, défier le boss avec succès!"); retour 1; } else {System.out.println (this.toString ()); System.out.println ("Continuez à attaquer le boss ..."); // Le nombre aléatoire réduit la valeur sanguine et la valeur de force pour continuer KO int blood_sub = random.nextint (10); int sword_sub = random.nextint (10); this.blood - = Blood_sub; this.sword - = sword_sub; retour 0; }}} @Override public String toString () {return "Valeur sanguine actuelle:" + this.blood + "- Valeur de force actuelle:" + this.sword; } / ** * Mémorandum (toute la classe est privée et ne peut être accessible que par l'initiateur) * * @author * * / classe privée memento implémente inArrowMemento {// Blood Value Private Final int sang; // Force la valeur privée finale finale épée; // Contenu d'initialisation du constructeur Mément privé (int sang, épée int) {this.blood = sang; this.sword = épée; } private int getBlood () {return sang; } private int getSword () {return sword; }}}3.3 Gestionnaire de mémorandum - gardien
package com.demo.caretaker; import com.demo.Mento.inarrowMmento; / ** * Administrateur * * @Author * * / public class Caretaker {private inArrowMmento memento; / ** * Obtenez un objet de mémorandum * * @return * / public inArrowMemento getMemmento () {return memento; } / ** * Enregistrer l'objet de mémorandum * * @param memento * / public void setMemento (inArrowMemento memento) {this.Mento = memento; }}3.4 Laissez le héros défier le patron un client
package com.demo; import com.demo.caretaker.caretaker; import com.demo.originator.hero; / ** * application principale du client * * @author * * / public class Client {/ ** * @param args * / public static void main (string [] args) {// create role Hero Hero = New Hero (); // Créer un gardien d'administrateur Caretaker = New Caretaker (); // Enregistrez les informations de statut avant le défi Caretaker.SetMemento (Hero.CreateMmento ()); // Il n'y a que trois chances de vaincre le boss int cnt = 1; // défier le résultat du boss int ko = -1; while (ko! = 1 && cnt <= 3) {System.out .println ("===================" + CNT + "Challenge ======================================================================================. ======================================================================================. {if (ko == -1) {// Challenge a échoué à l'état initial du défi cumulé Hero.RestoreFrommento (Caretaker.getMmento (); }}4 Résultats en cours d'exécution
Créer un mémo ...
=====================================================.
Valeur sanguin actuelle: 100 - Valeur de force actuelle: 100
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 96 - Valeur de force actuelle: 99
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 90 - Valeur de force actuelle: 98
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 81 - Valeur de force actuelle: 95
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 78 - Valeur de force actuelle: 93
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 72 - Valeur de force actuelle: 88
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 64 - Valeur de force actuelle: 85
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 56 - Valeur de force actuelle: 80
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 49 - Valeur de force actuelle: 73
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 45 - Valeur de force actuelle: 71
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 37 - Valeur de force actuelle: 68
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 29 - Valeur de force actuelle: 65
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 20 - Valeur de force actuelle: 59
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 11 - Valeur de force actuelle: 54
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 9 - Valeur de force actuelle: 52
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 3 - Valeur de force actuelle: 45
Continuez à attaquer le boss ...
Valeur sanguin actuelle: -3 - Valeur de force actuelle: 41
Échec de la défaite du patron!
Restaurer le statut dans la mémo ...
====================== 2nd Challenge ==============.
Valeur sanguin actuelle: 100 - Valeur de force actuelle: 100
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 96 - Valeur de force actuelle: 95
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 96 - Valeur de force actuelle: 91
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 88 - Valeur de force actuelle: 82
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 79 - Valeur de force actuelle: 79
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 76 - Valeur de force actuelle: 72
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 73 - Valeur de force actuelle: 70
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 72 - Valeur de force actuelle: 66
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 72 - Valeur de force actuelle: 61
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 72 - Valeur de force actuelle: 58
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 72 - Valeur de force actuelle: 52
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 63 - Valeur de force actuelle: 51
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 62 - Valeur de force actuelle: 50
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 54 - Valeur de force actuelle: 41
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 50 - Valeur de force actuelle: 39
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 47 - Valeur de force actuelle: 39
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 43 - Valeur de force actuelle: 38
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 37 - Valeur de force actuelle: 36
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 34 - Valeur de force actuelle: 35
Continuez à attaquer le boss ...
Valeur sanguine actuelle: 32 - Valeur de force actuelle: 27
Continuez à attaquer le boss ...
Valeur sanguine actuelle: 28 - Valeur de force actuelle: 22
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 26 - Valeur de force actuelle: 15
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 24 - Valeur de force actuelle: 11
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 19 - Valeur de force actuelle: 3
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 10 - Valeur de force actuelle: -3
Échec de la défaite du patron!
Restaurer le statut dans la mémo ...
==================== Le troisième défi ================.
Valeur sanguin actuelle: 100 - Valeur de force actuelle: 100
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 99 - Valeur de force actuelle: 93
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 98 - Valeur de force actuelle: 84
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 98 - Valeur de force actuelle: 82
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 95 - Valeur de force actuelle: 76
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 88 - Valeur de force actuelle: 68
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 81 - Valeur de force actuelle: 64
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 76 - Valeur de force actuelle: 64
Continuez à attaquer le boss ...
Valeur sanguin actuelle: 67 - Valeur de force actuelle: 64
Félicitations, vous avez réussi à contester le patron!
Iii. Les principes de conception de ce modèle
1. Maintenir la limite du paquet
2 Implémentation à double interface pour assurer la sécurité.
4. Utiliser des occasions
1 Lorsqu'il est nécessaire de restaurer l'état précédent d'un objet à un certain moment.
2.
3 L'implémentation du mode Mémo Black Box fournit un mécanisme d'accès à double interface, fournissant une interface large à l'objet initiateur, et une interface étroite à des objets autres que l'initiateur, résolvant ainsi efficacement l'encapsulation et la sécurité.
V. Diagramme de classe statique
1 Diagramme de classe statique du mode MODE BOIS BLANC
2 Schéma de classe statique du mode de note de boîte noire
Pour plus de contenu lié à Java, les lecteurs qui sont intéressés par ce site peuvent afficher les sujets: "Tutoriel de structure de données Java et d'algorithme", "Résumé des conseils de nœud de Dom Operation Java", "Résumé du fichier Java et des conseils d'opération de répertoire" et "Résumé des conseils d'opération Java Cache"
J'espère que cet article sera utile à la programmation Java de tous.