[JAVA] Modèle de conception ~ Proxy ~

1.Tout d'abord

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

2. Quel est le modèle Proxy?

3. Exemple de diagramme de classes

Proxy.PNG

4. Exemple de programme

Il s'agit d'un programme "imprimante nommée" qui affiche des caractères à l'écran.

4-1. Interface imprimable

Il s'agit d'une interface commune pour l'imprimante et le proxy d'imprimante.

Printable.java


public interface Printable {
	//Réglage du nom
	public abstract void setPrinterName(String name);
	//Obtenir le nom
	public abstract String getPrinterName();
	//Affichage de la chaîne de caractères(imprimer)
	public abstract void print(String string);
}

4-2. Classe PrinterProxy

Une classe qui représente une imprimante nommée. (Agent)

PrinterProxy.java


public class PrinterProxy implements Printable {

	private String name;
	private Printer real;

	public PrinterProxy() {
	}

	public PrinterProxy(String name) {
		this.name = name;
	}

	public synchronized void setPrinterName(String name) {
		if (real != null) {
			real.setPrinterName(name);
		}
		this.name = name;
	}

	public String getPrinterName() {
		return name;
	}

	public void print(String string) {
		realize();
		real.print(string);
	}

	private synchronized void realize() {
		if (real == null) {
			real = new Printer(name);
		}
	}
}

4-3. Classe d'imprimante

Une classe qui représente une imprimante nommée. (La personne)

Printer.java


public class Printer implements Printable {

	private String name;

	public Printer() {
		heavyJob("Générer une instance d'imprimante");
	}

	public Printer(String name) {
		this.name = name;
		heavyJob("Instance d'imprimante(" + name + ")Est en cours de génération");
	}

	public void setPrinterName(String name) {
		this.name = name;
	}

	public String getPrinterName() {
		return name;
	}

	public void print(String string) {
		System.out.println("=== " + name + " ===");
		System.out.println(string);
	}

	private void heavyJob(String msg) {
		System.out.print(msg);
		for (int i = 0; i < 5; i++) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
			}
			System.out.print(".");
		}
		System.out.println("Terminé.");
	}
}

4-4. Classe principale

Cette classe effectue le traitement principal.

Main.java


public class Main {
	public static void main(String[] args) {
		Printable p = new PrinterProxy("Alice");
		System.out.println("Le nom est maintenant" + p.getPrinterName() + "est.");
		p.setPrinterName("Bob");
		System.out.println("Le nom est maintenant" + p.getPrinterName() + "est.");
		p.print("Hello, world.");
	}
}

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

Le nom est maintenant Alice.
Le nom est maintenant Bob.
Instance d'imprimante(Bob)Est en cours de génération.....Terminé.
=== Bob ===
Hello, world.

5. Avantages

Dans le modèle Proxy, Proxy agit comme un proxy et prend le relais autant que possible. Dans l'exemple de programme, en utilisant le rôle Proxy, il était possible de retarder le traitement lourd (instanciation) jusqu'à l'impression réelle. Par exemple, dans un système où de nombreuses fonctions prennent beaucoup de temps à s'initialiser, si toutes les fonctions non utilisées au moment du démarrage sont initialisées, le démarrage de l'application prendra du temps. Il est possible de placer la fonction de délai dans la classe Printer depuis le début au lieu de la diviser en classe PrinterProxy et en classe Printer. Je peux.

  1. GitHub

7. Liste des modèles de conception

8. Référence

Cet article et l'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 ~ Proxy ~
Modèle de proxy
Modèle de conception ~ Constructeur ~
Modèle de conception ~ Visiteur ~
Modèle de conception Java
Modèle de conception ~ État ~
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 ~ Itérateur ~
Modèle de conception ~ Façade ~
Modèle de conception ~ Pont ~
Modèle de conception ~ Médiateur ~
Modèle de conception ~ Décorateur ~
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 ~ Poids mouche ~
Modèle de conception C ++ (modèle TemplateMethod)
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
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)
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 stratégie
Modèle d'itérateur
Modèle de visiteur
Modèle d'adaptateur
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
Modèle de poids mouche
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"