Hier ist eine Zusammenfassung des ** Proxy-Musters ** im GoF-Entwurfsmuster.
Dies ist ein "benannter Drucker" -Programm, das Zeichen auf dem Bildschirm anzeigt.
Dies ist eine allgemeine Schnittstelle für Drucker und Druckerproxy.
Printable.java
public interface Printable {
//Namenseinstellung
public abstract void setPrinterName(String name);
//Name holen
public abstract String getPrinterName();
//Zeichenfolgenanzeige(ausdrucken)
public abstract void print(String string);
}
Eine Klasse, die einen benannten Drucker darstellt. (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);
}
}
}
Eine Klasse, die einen benannten Drucker darstellt. (Person)
Printer.java
public class Printer implements Printable {
private String name;
public Printer() {
heavyJob("Generieren einer Druckerinstanz");
}
public Printer(String name) {
this.name = name;
heavyJob("Druckerinstanz(" + name + ")Wird generiert");
}
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("Erledigt.");
}
}
Diese Klasse führt die Hauptverarbeitung durch.
Main.java
public class Main {
public static void main(String[] args) {
Printable p = new PrinterProxy("Alice");
System.out.println("Der Name ist jetzt" + p.getPrinterName() + "ist.");
p.setPrinterName("Bob");
System.out.println("Der Name ist jetzt" + p.getPrinterName() + "ist.");
p.print("Hello, world.");
}
}
Der Name ist jetzt Alice.
Der Name ist jetzt Bob.
Druckerinstanz(Bob)Wird generiert.....Erledigt.
=== Bob ===
Hello, world.
Im Proxy-Muster fungiert Proxy als Agent und übernimmt so viel wie möglich. Im Beispielprogramm war es mithilfe der Proxy-Rolle möglich, die Verarbeitung (Instanziierung) bis zum eigentlichen Druck zu verzögern. In einem System mit vielen Funktionen, deren Initialisierung lange dauert, dauert es einige Zeit, bis alle Anwendungen initialisiert sind, die zum Zeitpunkt des Starts nicht verwendet wurden. Es ist möglich, die Verzögerungsfunktion von Anfang an in die Printer-Klasse einzufügen, anstatt sie in die PrinterProxy-Klasse und die Printer-Klasse zu unterteilen. Durch die Trennung der Klassen wird das Programm jedoch stärker komponiert und die Funktionen können einzeln hinzugefügt werden. Ich kann.
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 der Entwurfsmuster und Beispielprogramme sind geschrieben. Schauen Sie sich also auch die Bücher an.
Recommended Posts