Voici un résumé du ** modèle Flyweight ** dans le modèle de conception du GoF.
――Le mot anglais Flyweight signifie ** Flyweight **. Représente la classe la plus légère de la boxe.
Un programme qui lit un texte volumineux à partir d'un fichier et l'affiche.
Une classe qui représente de grandes lettres.
BigChar.java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BigChar {
//Le nom du personnage
private char charname;
//Une chaîne de caractères qui représente un gros caractère('#' '.' '\n'Colonne)
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 + "?";
}
}
//Afficher les grandes lettres
public void print() {
System.out.print(fontdata);
}
}
Une classe créée lors du partage d'une instance de BigChar.
BigCharFactory.java
import java.util.HashMap;
public class BigCharFactory {
//Gérer les instances BigChar déjà créées
private HashMap pool = new HashMap();
private static BigCharFactory singleton = new BigCharFactory();
private BigCharFactory() {
}
//Obtenez une seule instance
public static BigCharFactory getInstance() {
return singleton;
}
//Instanciation BigChar(partager)
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;
}
}
C'est une classe qui représente une "grande chaîne de caractères" créée en collectant BigChar.
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();
}
}
}
Cette classe effectue le traitement principal.
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();
}
}
Veuillez vous référer au fichier txt suivant. https://github.com/i-tanaka730/design_pattern/tree/master/src/Flyweight
..##########....
..##......##....
..........##....
........##......
......##........
......##........
......##........
................
......##........
..######........
......##........
......##........
......##........
......##........
..##########....
................
..##########....
..##......##....
..........##....
........##......
......##........
......##........
......##........
................
..##########....
..##............
..##............
..########......
..........##....
..##......##....
....######......
................。
Le partage d'une instance réduit l'utilisation de la mémoire en n'ayant pas à renouveler à chaque fois. Plus généralement, le partage d'une instance peut réduire la quantité de ** ressources ** nécessaires pour créer une instance. Une ressource est une ressource sur un ordinateur et la mémoire est un type de ressource. Le temps est aussi une ressource. Si la création d'une nouvelle instance prend un certain temps, vous pouvez réduire le nombre de nouvelles instances en partageant l'instance à l'aide du modèle Flyweight. Cela peut accélérer le programme.
Cet article et exemple de programme ont été créés à partir des livres suivants.
C'était très facile à comprendre et j'ai beaucoup appris. Je vous remercie. Les explications détaillées des modèles de conception et des exemples de programmes sont écrites, veuillez donc également consulter les livres.
Recommended Posts