Hier ist eine Zusammenfassung des ** Fliegengewichtsmusters ** im GoF-Entwurfsmuster.
――Das englische Wort Flyweight bedeutet ** Flyweight **. Repräsentiert die leichteste Klasse im Boxen.
Ein Programm, das großen Text aus einer Datei liest und anzeigt.
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);
}
}
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;
}
}
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();
}
}
}
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();
}
}
Bitte beziehen Sie sich auf die folgende txt-Datei. https://github.com/i-tanaka730/design_pattern/tree/master/src/Flyweight
..##########....
..##......##....
..........##....
........##......
......##........
......##........
......##........
................
......##........
..######........
......##........
......##........
......##........
......##........
..##########....
................
..##########....
..##......##....
..........##....
........##......
......##........
......##........
......##........
................
..##########....
..##............
..##............
..########......
..........##....
..##......##....
....######......
................。
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.
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