[JAVA] Modèle de conception ~ Poids mouche ~

1.Tout d'abord

Voici un résumé du ** modèle Flyweight ** dans le modèle de conception du GoF.

2. Quel est le modèle Flyweight?

――Le mot anglais Flyweight signifie ** Flyweight **. Représente la classe la plus légère de la boxe.

3. Exemple de diagramme de classes

Flyweight.PNG

4. Exemple de programme

Un programme qui lit un texte volumineux à partir d'un fichier et l'affiche.

4-1. Classe BigChar

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);
	}
}

4-2. Classe BigCharFactory

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;
	}
}

4-3. Classe BigString

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();
		}
	}
}

4-4. Classe principale

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();
	}
}

4-5. Données

Veuillez vous référer au fichier txt suivant. https://github.com/i-tanaka730/design_pattern/tree/master/src/Flyweight

4-6. Résultat de l'exécution

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

5. Avantages

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.

  1. GitHub

7. Liste des modèles de conception

8. Référence

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

Modèle de conception ~ Poids mouche ~
Modèle de poids mouche
Modèle de conception ~ Constructeur ~
Modèle de conception ~ Visiteur ~
Modèle de conception ~ Proxy ~
Modèle de conception ~ Stratégie ~
Modèle de conception ~ Singleton ~
Modèle de conception ~ Composite ~
Modèle de conception (2): constructeur
Modèle de conception (1): AbstractFactory
Modèle de conception ~ Commande ~
Modèle de conception ~ Façade ~
Modèle de conception ~ Pont ~
Modèle de conception ~ Médiateur ~
Modèle de conception ~ Interprète ~
Modèle de conception ~ Observateur ~
Modèle de conception ~ Prototype ~
Modèle de conception ~ Memento ~
Modèle de conception ~ Adaptateur ~
Modèle de conception ~ Méthode d'usine ~
Modèle de conception ~ Usine abstraite ~
Résumé du modèle de conception du GoF
Modèle de conception ~ Méthode de modèle ~
Résumé du modèle de conception Java
Modèle de conception ~ Chaîne de responsabilité ~
[Design pattern] Bibliothèque de base Java
Introduction aux modèles de conception (poids mouche)
Modèle de conception par la méthode Ruby Template Mémo de modèle
Modèle de conception mâché C #: TemplateMethod
Exemple d'application du modèle de conception (n ° 1)
Modèle de conception Java pour débutant (modèle de méthode d'usine)
Modèle de prototype
Motif de souvenir
Motif médiateur
Modèle d'itérateur
Motif composite
Modèle d'observateur
Modèle de constructeur
Modèle de pont
Modèle de commande
Modèle de constructeur
Modèle de stratégie
Modèle d'itérateur
Modèle de visiteur
Modèle d'adaptateur
Modèle de proxy
Modèle de stratégie
Motif composite
Motif singleton
Motif singleton
Modèle de prototype
[Modèle de conception] Logique commune avec la méthode de modèle
Modèle de façade
Motif décorateur
Motif décorateur
Modèle de médiateur
Motif de façade
Modèle de visiteur
Modèle de pont
PrintObserver "Modèle de conception d'observateur: description et exemple d'implémentation"
Repenser le modèle d'expression et de conception de flux Java8 Lambda - Modèle de commande -