Dieser Artikel beschreibt die Implementierung von Gozi -Schachspielfunktionen basierend auf dem Xiangyuan -Modus von Java. Teilen Sie es für Ihre Referenz wie folgt weiter:
1. Musterdefinition
Genießen Sie den Weltmodus effizient unterstützt eine große Anzahl feinkörniger Objekte auf gemeinsame Weise. Reduzieren Sie den Leistungsverbrauch des Systems erstellen Objektinstanzen, indem Sie vorhandene Objekte im Speicher multiplexen. Das Englisch von Xiangyuan ist flüchtig, was ein besonders kleines Objekt bedeutet, dh ein feinkörniges Objekt.
2. Beispiele des Modells
1. Musteranalyse
Wir leihen uns das Gozi -Spiel aus, um dieses Muster zu veranschaulichen.
2. statisches Klassendiagramm des Genießens Yuan -Modus
3. Codebeispiel
3.1 abstraktes Chessman erstellen
Paket com.demo.flyweight.object; public abstract class AbstractChessman {// Schachpapierkoordinaten geschützt int x; geschützte int y; // Schachpapierkategorie (schwarz | weiß) geschützter Stringschach; public AbstractChessman (String -Schach) {this.chess = chess; } // Punktkoordinaten setzen öffentliche abstrakte void Point (int x, int y); // Schachpapierinformationen public void show () {System.out.println (this.chess + "(" + this.x + "," + this.y + ")"); }}3.2 BlackChessman erstellen
Paket com.demo.flyweight.Object; öffentliche Klasse BlackChessman erweitert AbstractChessman { / ** * Konstruktor initialisiert Black Chessman * / public BlackChessman () {Super ("●"); System.out.println ("-BlackChessman Construction Exec !!!"); } // Punktkoordinateneinstellung @Override public void point (int x, int y) {this.x = x; this.y = y; // Schachinhalte Show Show (); }}3.3 Erstellen Sie Whitechessman
Paket com.demo.flyweight.Object; öffentliche Klasse Whitechessman erweitert AbstractChessman { / ** * Konstruktor initialisiert weiße Schachschütze * / public whitechessman () {Super ("○"); System.out.println ("-Whitechessman Construction Exec !!!"); } // Punktkoordinateneinstellung @Override public void point (int x, int y) {this.x = x; this.y = y; // Schach -Stück -Inhalts -Show () zeigen; }}3.4 Erstellen Sie eine Schachmannfabrik
Paket com.demo.flyweight.factory; import java.util.hashtable; import com.demo.flygewicht.object.abstractChessman; com.demo.flyweight FivechessManfactory fivechessManfactory = new fivechessManfactory (); // Cache zum Speichern von gemeinsam genutzten Objekten private endgültige Hashtable <Charakter, AbstractChessman> Cache = New Hashtable <Charakter, AbstractChessman> (); // Privatisierungskonstruktor private fivechessManfactory () {} // Singleton Factory Public static fivechessManfactory getInstance () {return fivechessManfactory; } / ** * Holen Sie Schachstücke basierend auf Zeichen * * @param c * (b: schwarzes schach: weißer schach) * @return * / public AbstractChessman getChessManObject (char c) {// die Instanz des Pfandobjekts aus dem Cache AbstractChessman AbstractChessMan = this.cache.get (c); if (AbstractChessman == NULL) {// Wenn es keine Informationen zu Pfandobjektinstanzen im Cache gibt, erstellen Sie die Pfandobjektinstanz und legen Sie sie in den Cache -Switch (c) {case 'b': AbstractChessman = new BlackChessman (); brechen; Fall 'W': AbstractChessman = New Whitechessman (); brechen; Standard: Break; } //, um zu verhindern, dass illegale Zeichen NULL IF (AbstractChessman! }} // Wenn im Cache ein Schachobjekt vorhanden ist, geben Sie direkt AbstractChessman zurück. }}3.5 Client -Implementierung
package com.demo;import java.util.Random;import com.demo.flyweight.factory.FiveChessmanFactory;import com.demo.flyweight.object.AbstractChessman;/** * Main application* * @author */public class Client { /** * @param args */ public static void main(String[] args) { // Create Goziqi Factory fivechessManfactory fivechessManfactory = fivechessManfactory .getInstance (); Random random = new random (); int radom = 0; AbstractChessman AbstractChessman = NULL; // das Schachstück für (int i = 0; i <10; i ++) {radom = random.Nextint (2) erhalten; Switch (Radom) {// den schwarzen Schachfall 0: AbstractChessman = fivechessManfactory.getChessManObject ('B') erhalten; brechen; // den weißen Schachfall 1: AbstractChessman = fivechessManfactory.getChessManObject ('W') erhalten; brechen; } if (AbstractChessman! = null) {AbstractChessman.Point (i, random.nextint (15)); }}}}4. Betriebsergebnisse
-Whitechessman Construction Exec !!!
○ (0,2)
○ (1,6)
-BlackChessman Construction Exec !!!
● (2,3)
○ (3,14)
○ (4,13)
○ (5,8)
● (6,14)
● (7,0)
● (8,3)
○ (9,8)
3. zwei Zustände des Genussmodus
Intrinsischer Zustand : Sie ändert sich nicht mit der Umweltveränderung, sondern wird in den internen Zustandsinformationen des Entrinsic -Objekts gespeichert. Dieser intrinsische Zustand kann geteilt werden. Für jedes Entrinsic -Objekt ist sein Wert genau der gleiche. Genau wie die "schwarzen Stücke" und "weißen Stücke" in Goji ist der Zustand, den es darstellt, der innere Zustand.
Externer Zustand : Es wird sich mit der Umweltveränderung ändern, sodass er den Staat nicht teilen kann. Für verschiedene Objekte der Gattung können ihre Werte unterschiedlich sein. Der äußere Zustand des Xiangyuan -Objekts muss vom Kunden gespeichert werden. Nachdem das Xiangyuan -Objekt erstellt wurde und verwendet werden muss, wird es in das Xiangyuan -Objekt übergeben. Genau wie die Positionsinformationen von Gozi ist der dargelegte Staat der externe Zustand des Objekts der Ökologie.
Daher sind die externen und inneren Zustände von Xiangyuan zwei unabhängige Staaten und haben keine Verbindung zueinander.
Iv. Prinzipien der Gestaltung dieses Modells
1. Teilen Sie feinkörnige Objekte, um den Speicherplatz zu reduzieren.
2. Isolieren Sie effektiv die sich ändernden Teile und die unveränderten Teile des Systems.
5. Anlässe verwenden
1. Wenn es viele Fälle eines bestimmten Objekttyps im System gibt.
2. In der Systemdesign ist es nach der Klassifizierung von Objektinstanzen an der Zeit festzustellen, dass es nur wenige wirklich unterschiedliche Kategorien gibt.
6. Statische Klassendiagramm des Genießens Yuan -Modus
Für weitere Informationen zu Java -Algorithmen können Leser, die an dieser Website interessiert sind, die Themen "Java -Datenstruktur und Algorithmus -Tutorial", "Zusammenfassung der Java -Operation DOM -Knoten -Tipps", "Zusammenfassung der Java -Datei- und Verzeichnisoperationstipps" und "Zusammenfassung der Java -Cache -Operation Tipps" anzeigen
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.