In diesem Artikel wird die Verwendung des Memo-Modus zur Implementierung der Spielfunktionen von Java beschrieben. Teilen Sie es für Ihre Referenz wie folgt weiter:
1. Musterdefinition
Der Memo -Modus erfasst den inneren Zustand eines Objekts, ohne das Gehäuse zu zerstören, und rettet diesen Zustand außerhalb des Objekts. Auf diese Weise kann das Objekt später in seinen ursprünglichen gespeicherten Zustand wiederhergestellt werden.
2. Beispiele des Modells
1 Modusanalyse
Wir haben das Level-Through-Spiel ausgeliehen, um diesen Modus zu veranschaulichen.
2 Memo -Modus Statische Klassendiagramm
3 Codebeispiele (Black Box Memo -Modus)
3.1 Erstellen Sie Memo Enge Interface InarrowMemento
Paket com.demo.Memento;/** * Memorandum Enge Interface (keine Methode wird bereitgestellt, externe Objekte können nicht auf interne Informationen des Memorandum -Objekts zugreifen) * * @Author * */öffentliche Schnittstelle InarrowMemento {}3.2 Memorandum Sponsor Held
Paket com.demo.originator; import java.util.random; import com.demo.memento.inarrowMemento;/** * Challenger * * @author * */public class Hero {// Blood Value Private Int Blood; // Value private int Sword erzwingen; // zufällige Zahl private endgültige zufällige random = new random (); // Methode konstruieren Initialisieren von Inhalten öffentlicher Hero () {this.blood = 100; this.sword = 100; } // Memorandum erstellen, um Inhalte public InarrowMemento CreateMemento () {System.out.println ("Memorandum erstellen ...") zu sparen;); Return New Memento (this.blood, this.sword); } // Memorandum content public void restoreFromemento (InarrowMemento memento) {System.out.println ("den Status im Memorandum wiederherstellen ..."); if (memento! = null) {memento memento2 = (memento) memento; this.blood = memento2.getblood (); this.sword = memento2.getSword (); }} / ** * Challenge Boss * / public int koboss () {// Wenn der Blutwert <= 0 ist, schlägt die Herausforderung fehl. Angenommen, die Wahrscheinlichkeit, den Boss zu besiegen, beträgt 2% // Bei der Beurteilung gibt es immer noch einen Blutwert, wenn (dieses. System.out.println ("Ändern Sie den Chef fehl!"); Return -1; } else {// Holen Sie sich die zufällige Zahl double win = math.random (); if (Win <= 0,02) {System.out.println (this.toString ()); System.out.println ("Herzlichen Glückwunsch, herausfordern Sie den Chef erfolgreich!"); Rückkehr 1; } else {System.out.println (this.toString ()); System.out.println ("weiterhin den Chef angreifen ..."); // Zufallszahl reduziert den Blutwert und den Kraftwert, um KO int blood_sub = random.Nextint (10) fortzusetzen; int sword_sub = random.nextint (10); this.blood -= blood_sub; this.sword -= SWORD_SUB; Rückkehr 0; }}} @Override public String toString () {return "aktueller Blutwert:" + this.blood + " - aktueller Kraftwert:" + this.sword; } / ** * memorandum (die gesamte Klasse ist privat und kann nur vom Initiator zugegriffen werden) * * @Author * * / private Klasse Memento implementiert InarrowMemento {// Blood Value Private Final Int Blood; // Wert Wert privat endgültiger intschwert; // Konstruktorinitialisierungsinhalt private Memento (int Blood, int Sword) {this.blood = blut; this.sword = Sword; } private int getblood () {return blood; } private int getSword () {return Sword; }}}3.3 Memorandum Manager - Hausmeister
Paket com.demo.Caretaker; Import Com.demo.Memento.inarrowMemento;/** * Administrator * * @Author * */PUSTURY CLASS BEIDE {private InarrowMemento memento; / ** * Memorandum -Objekt erhalten * * @return */ public InarrowMemento getMemento () {return memento; } / ** * Speichern memorandum -Objekt * * @param memento * / public void setMemento (InarrowMemento memento) {this.Memento = memento; }}3.4 Lassen Sie den Helden den Chef einen Kunden herausfordern
Paket com.demo; import com.demo.caretaker // Administrator für Hausmeister für Hausmeister = neuer Hausmeister () erstellen; // die Statusinformationen vor dem Herausforderer speichern. // Es gibt nur drei Chancen, den Boss int cnt = 1 zu besiegen; // Herausforderung des Boss -Ergebniss int Ko = -1; while (ko! = 1 && cnt <= 3) {System.out .println ("===================" + cnt + "Herausforderung ===========================================================ieben ===========================================================ieben {if (ko == -1) {// Challenge fehlgeschlagen und in den anfänglichen Zustand kumulieren. }}}4 Auslaufergebnisse
Erstellen Sie ein Memo ...
============================================
Strom Blutwert: 100 - Stromkraftwert: 100
Greifen Sie den Chef weiter an ...
Strom Blutwert: 96 - Stromkraftwert: 99
Greifen Sie den Chef weiter an ...
Strom Blutwert: 90 - Stromkraftwert: 98
Greifen Sie den Chef weiter an ...
Strom Blutwert: 81 - Stromkraftwert: 95
Greifen Sie den Chef weiter an ...
Strom Blutwert: 78 - Stromkraftwert: 93
Greifen Sie den Chef weiter an ...
Strom Blutwert: 72 - Stromkraftwert: 88
Greifen Sie den Chef weiter an ...
Strom Blutwert: 64 - Stromkraftwert: 85
Greifen Sie den Chef weiter an ...
Aktueller Blutwert: 56 - Stromkraftwert: 80
Greifen Sie den Chef weiter an ...
Strom Blutwert: 49 - Stromkraftwert: 73
Greifen Sie den Chef weiter an ...
Strom Blutwert: 45 - Stromkraftwert: 71
Greifen Sie den Chef weiter an ...
Strom Blutwert: 37 - Stromkraftwert: 68
Greifen Sie den Chef weiter an ...
Strom Blutwert: 29 - Stromkraftwert: 65
Greifen Sie den Chef weiter an ...
Aktueller Blutwert: 20 - Stromkraftwert: 59
Greifen Sie den Chef weiter an ...
Aktueller Blutwert: 11 - Stromkraftwert: 54
Greifen Sie den Chef weiter an ...
Strom Blutwert: 9 - Stromkraftwert: 52
Greifen Sie den Chef weiter an ...
Aktueller Blutwert: 3 - Stromkraftwert: 45
Greifen Sie den Chef weiter an ...
Aktueller Blutwert: -3 - Stromkraftwert: 41
Ich habe den Chef nicht herausfordern!
Status im Memo wiederherstellen ...
===================== 2. Challenge =====================
Strom Blutwert: 100 - Stromkraftwert: 100
Greifen Sie den Chef weiter an ...
Strom Blutwert: 96 - Stromkraftwert: 95
Greifen Sie den Chef weiter an ...
Aktueller Blutwert: 96 - Stromkraftwert: 91
Greifen Sie den Chef weiter an ...
Strom Blutwert: 88 - Stromkraftwert: 82
Greifen Sie den Chef weiter an ...
Aktueller Blutwert: 79 - Stromkraftwert: 79
Greifen Sie den Chef weiter an ...
Strom Blutwert: 76 - Stromkraftwert: 72
Greifen Sie den Chef weiter an ...
Strom Blutwert: 73 - Stromkraftwert: 70
Greifen Sie den Chef weiter an ...
Strom Blutwert: 72 - Stromkraftwert: 66
Greifen Sie den Chef weiter an ...
Strom Blutwert: 72 - Stromkraftwert: 61
Greifen Sie den Chef weiter an ...
Strom Blutwert: 72 - Stromkraftwert: 58
Greifen Sie den Chef weiter an ...
Strom Blutwert: 72 - Stromkraftwert: 52
Greifen Sie den Chef weiter an ...
Strom Blutwert: 63 - Stromkraftwert: 51
Greifen Sie den Chef weiter an ...
Strom Blutwert: 62 - Stromkraftwert: 50
Greifen Sie den Chef weiter an ...
Strom Blutwert: 54 - Stromkraftwert: 41
Greifen Sie den Chef weiter an ...
Strom Blutwert: 50 - Stromkraftwert: 39
Greifen Sie den Chef weiter an ...
Strom Blutwert: 47 - Stromkraftwert: 39
Greifen Sie den Chef weiter an ...
Strom Blutwert: 43 - Stromkraftwert: 38
Greifen Sie den Chef weiter an ...
Strom Blutwert: 37 - Stromkraftwert: 36
Greifen Sie den Chef weiter an ...
Strom Blutwert: 34 - Stromkraftwert: 35
Greifen Sie den Chef weiter an ...
Strom Blutwert: 32 - Stromkraftwert: 27
Greifen Sie den Chef weiter an ...
Aktueller Blutwert: 28 - Stromkraftwert: 22
Greifen Sie den Chef weiter an ...
Strom Blutwert: 26 - Stromkraftwert: 15
Greifen Sie den Chef weiter an ...
Strom Blutwert: 24 - Stromkraftwert: 11
Greifen Sie den Chef weiter an ...
Aktueller Blutwert: 19 - Stromkraftwert: 3
Greifen Sie den Chef weiter an ...
Strom Blutwert: 10 - Stromkraftwert: -3
Ich habe den Chef nicht herausfordern!
Status im Memo wiederherstellen ...
================ieben
Strom Blutwert: 100 - Stromkraftwert: 100
Greifen Sie den Chef weiter an ...
Strom Blutwert: 99 - Stromkraftwert: 93
Greifen Sie den Chef weiter an ...
Strom Blutwert: 98 - Stromkraftwert: 84
Greifen Sie den Chef weiter an ...
Strom Blutwert: 98 - Stromkraftwert: 82
Greifen Sie den Chef weiter an ...
Strom Blutwert: 95 - Stromkraftwert: 76
Greifen Sie den Chef weiter an ...
Strom Blutwert: 88 - Stromkraftwert: 68
Greifen Sie den Chef weiter an ...
Strom Blutwert: 81 - Stromkraftwert: 64
Greifen Sie den Chef weiter an ...
Strom Blutwert: 76 - Stromkraftwert: 64
Greifen Sie den Chef weiter an ...
Strom Blutwert: 67 - Stromkraftwert: 64
Herzlichen Glückwunsch, Sie haben den Chef erfolgreich in Frage gestellt!
III. Die Designprinzipien dieses Musters
1. Aufrechterhaltung der Grenze des Pakets
2 Implementierung der Doppelschnittstelle, um die Sicherheit zu gewährleisten.
4. Verwenden Sie Anlässe
1 Wenn es notwendig ist, den vorherigen Zustand eines Objekts in einem bestimmten Zeitpunkt wiederherzustellen.
2. Im White -Box -Memo -Modus müssen Sie den Status eines Objekts in einem bestimmten Zeitpunkt extern speichern. Wenn Sie jedoch eine Schnittstelle verwenden, damit andere Objekte diese Zustände direkt erhalten können, werden die Implementierungsdetails des Objekts freigelegt und die Einkapselung des Objekts zerstört.
3 Implementierung des Black Box Memo -Modus bietet einen Doppelschnittstellenzugriffsmechanismus, der eine breite Schnittstelle zum Initiatorobjekt und eine schmale Schnittstelle zu anderen Objekten als dem Initiator bietet, wodurch die Kapselung und Sicherheit effektiv gelöst wird.
V. Statische Klassendiagramm
1 White Box Memo -Modus Statische Klassendiagramm
2 Black Box Memo -Modus Statische Klassendiagramm
Für mehr Java-bezogene Inhalte können Leser, die an dieser Website interessiert sind, die Themen anzeigen: "Java-Datenstruktur und Algorithmus-Tutorial", "Zusammenfassung der Java-Operation DOM-Knoten-Tipps", "Zusammenfassung der Java-Datei- und Verzeichnisoperationstipps" und "Zusammenfassung von Java Cache Operation Tipps" "
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.