Voici un résumé du ** modèle de proxy ** dans le modèle de conception du GoF.
Il s'agit d'un programme "imprimante nommée" qui affiche des caractères à l'écran.
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);
}
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);
}
}
}
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é.");
}
}
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.");
}
}
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.
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.
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