[JAVA] Entwurfsmuster ~ Fliegengewicht ~

1. Zuallererst

Hier ist eine Zusammenfassung des ** Fliegengewichtsmusters ** im GoF-Entwurfsmuster.

2. Was ist das Fliegengewichtsmuster?

――Das englische Wort Flyweight bedeutet ** Flyweight **. Repräsentiert die leichteste Klasse im Boxen.

3. Beispielklassendiagramm

Flyweight.PNG

4. Beispielprogramm

Ein Programm, das großen Text aus einer Datei liest und anzeigt.

4-1. BigChar-Klasse

Eine Klasse, die große Buchstaben darstellt.

BigChar.java


import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class BigChar {

	//Charaktername
	private char charname;
	//Eine Zeichenfolge, die ein großes Zeichen darstellt('#' '.' '\n'Säule)
	private String fontdata;

	public BigChar(char charname) {
		this.charname = charname;
		try {
			BufferedReader reader = new BufferedReader(
					new FileReader("big" + charname + ".txt"));
			String line;
			StringBuffer buf = new StringBuffer();
			while ((line = reader.readLine()) != null) {
				buf.append(line);
				buf.append("\n");
			}
			reader.close();
			this.fontdata = buf.toString();
		} catch (IOException e) {
			this.fontdata = charname + "?";
		}
	}

	//Zeigen Sie große Buchstaben an
	public void print() {
		System.out.print(fontdata);
	}
}

4-2. BigCharFactory-Klasse

Eine Klasse, die beim Freigeben einer Instanz von BigChar erstellt wird.

BigCharFactory.java


import java.util.HashMap;

public class BigCharFactory {

	//Verwalten Sie bereits erstellte BigChar-Instanzen
	private HashMap pool = new HashMap();

	private static BigCharFactory singleton = new BigCharFactory();

	private BigCharFactory() {
	}

	//Holen Sie sich nur eine Instanz
	public static BigCharFactory getInstance() {
		return singleton;
	}

	//BigChar-Instanziierung(Aktie)
	public synchronized BigChar getBigChar(char charname) {
		BigChar bc = (BigChar) pool.get("" + charname);
		if (bc == null) {
			bc = new BigChar(charname);
			pool.put("" + charname, bc);
		}
		return bc;
	}
}

4-3. BigString-Klasse

Es ist eine Klasse, die eine "große Zeichenfolge" darstellt, die durch das Sammeln von BigChar erstellt wurde.

BigString.java


public class BigString {

	private BigChar[] bigchars;

	public BigString(String string) {
		bigchars = new BigChar[string.length()];
		BigCharFactory factory = BigCharFactory.getInstance();
		for (int i = 0; i < bigchars.length; i++) {
			bigchars[i] = factory.getBigChar(string.charAt(i));
		}
	}

	public void print() {
		for (int i = 0; i < bigchars.length; i++) {
			bigchars[i].print();
		}
	}
}

4-4 Hauptklasse

Diese Klasse führt die Hauptverarbeitung durch.

Main.java


public class Main {
	public static void main(String[] args) {
		if (args.length == 0) {
			System.out.println("Usage: java Main digits");
			System.out.println("Example: java Main 1212123");
			System.exit(0);
		}
		BigString bs = new BigString(args[0]);
		bs.print();
	}
}

4-5. Daten

Bitte beziehen Sie sich auf die folgende txt-Datei. https://github.com/i-tanaka730/design_pattern/tree/master/src/Flyweight

4-6 Ausführungsergebnis

..##########....
..##......##....
..........##....
........##......
......##........
......##........
......##........
................
......##........
..######........
......##........
......##........
......##........
......##........
..##########....
................
..##########....
..##......##....
..........##....
........##......
......##........
......##........
......##........
................
..##########....
..##............
..##............
..########......
..........##....
..##......##....
....######......
................。

5. Vorteile

Durch die gemeinsame Nutzung einer Instanz wird die Speichernutzung reduziert, da nicht jedes Mal eine erneute Erneuerung erforderlich ist. Im Allgemeinen kann das Freigeben einer Instanz die Menge an ** Ressourcen ** reduzieren, die zum Erstellen einer Instanz erforderlich sind. Eine Ressource ist eine Ressource auf einem Computer, und Speicher ist eine Art von Ressource. Zeit ist auch eine Ressource. Wenn das Erstellen einer neuen Instanz eine gewisse Zeit in Anspruch nimmt, können Sie die Anzahl neuer Instanzen verringern, indem Sie die Instanz mithilfe des Flyweight-Musters freigeben. Dies kann das Programm beschleunigen.

  1. GitHub

7. Liste der Entwurfsmuster

8. Referenz

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

Entwurfsmuster ~ Fliegengewicht ~
Fliegengewichtsmuster
Entwurfsmuster ~ Builder ~
Entwurfsmuster ~ Besucher ~
Entwurfsmuster ~ Proxy ~
Entwurfsmuster ~ Strategie ~
Entwurfsmuster ~ Singleton ~
Entwurfsmuster ~ Composite ~
Entwurfsmuster (2): Builder
Entwurfsmuster (1): AbstractFactory
Entwurfsmuster ~ Befehl ~
Entwurfsmuster ~ Fassade ~
Entwurfsmuster ~ Brücke ~
Entwurfsmuster ~ Mediator ~
Entwurfsmuster ~ Interpreter ~
Entwurfsmuster ~ Beobachter ~
Entwurfsmuster ~ Prototyp ~
Entwurfsmuster ~ Memento ~
Entwurfsmuster ~ Adapter ~
Entwurfsmuster ~ Fabrikmethode ~
Entwurfsmuster ~ Abstrakte Fabrik ~
Zusammenfassung des GoF-Entwurfsmusters
Entwurfsmuster ~ Vorlagenmethode ~
Zusammenfassung des Java-Entwurfsmusters
Entwurfsmuster ~ Verantwortungskette ~
[Entwurfsmuster] Java-Kernbibliothek
Einführung in Designmuster (Fliegengewicht)
Entwurfsmuster nach Ruby Template-Methode Musternotiz
C # gekautes Designmuster: TemplateMethod
Anwendungsbeispiel für Entwurfsmuster (Nr. 1)
Java-Anfänger-Entwurfsmuster (Factory-Methodenmuster)
Prototypmuster
Erinnerungsmuster
Vermittlermuster
Iteratormuster
Zusammengesetztes Muster
Beobachtermuster
Builder-Muster
Brückenmuster
Befehlsmuster
Builder-Muster
Strategiemuster
Iteratormuster
Besuchermuster
Adaptermuster
Proxy-Muster
Strategiemuster
Zusammengesetztes Muster
Singleton-Muster
Singleton-Muster
Prototypmuster
[Entwurfsmuster] Allgemeine Logik mit der Vorlagenmethode
Fassadenmuster
Dekorationsmuster
Dekorateur Muster
Vermittlermuster
Fassadenmuster
Besuchermuster
Brückenmuster
PrintObserver "Observer Design Pattern: Beschreibung und Implementierungsbeispiel"
Überdenken des Entwurfsmusters mit Java8 Lambda-Ausdruck & Stream - Befehlsmuster -