[JAVA] Entwurfsmuster ~ Proxy ~

1. Zuallererst

Hier ist eine Zusammenfassung des ** Proxy-Musters ** im GoF-Entwurfsmuster.

2. Was ist das Proxy-Muster?

3. Beispielklassendiagramm

Proxy.PNG

4. Beispielprogramm

Dies ist ein "benannter Drucker" -Programm, das Zeichen auf dem Bildschirm anzeigt.

4-1. Druckbare Oberfläche

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

4-2. PrinterProxy-Klasse

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

4-3. Druckerklasse

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

4-4 Hauptklasse

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

4-5 Ausführungsergebnis

Der Name ist jetzt Alice.
Der Name ist jetzt Bob.
Druckerinstanz(Bob)Wird generiert.....Erledigt.
=== Bob ===
Hello, world.

5. Vorteile

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.

  1. GitHub

7. Liste der Entwurfsmuster

8. Referenz

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

Entwurfsmuster ~ Proxy ~
Proxy-Muster
Entwurfsmuster ~ Builder ~
Entwurfsmuster ~ Besucher ~
Java-Entwurfsmuster
Entwurfsmuster ~ Zustand ~
Entwurfsmuster ~ Strategie ~
Entwurfsmuster ~ Singleton ~
Entwurfsmuster ~ Composite ~
Entwurfsmuster (2): Builder
Entwurfsmuster (1): AbstractFactory
Entwurfsmuster ~ Befehl ~
Entwurfsmuster ~ Iterator ~
Entwurfsmuster ~ Fassade ~
Entwurfsmuster ~ Brücke ~
Entwurfsmuster ~ Mediator ~
Entwurfsmuster ~ Dekorateur ~
Entwurfsmuster ~ Interpreter ~
Entwurfsmuster ~ Beobachter ~
Entwurfsmuster ~ Prototyp ~
Entwurfsmuster ~ Memento ~
Entwurfsmuster ~ Adapter ~
Entwurfsmuster ~ Fliegengewicht ~
C ++ - Entwurfsmuster (TemplateMethod-Muster)
Entwurfsmuster ~ Fabrikmethode ~
Entwurfsmuster ~ Abstrakte Fabrik ~
Zusammenfassung des GoF-Entwurfsmusters
Entwurfsmuster ~ Vorlagenmethode ~
Zusammenfassung des Java-Entwurfsmusters
Entwurfsmuster ~ Verantwortungskette ~
[Entwurfsmuster] Java-Kernbibliothek
C # gekautes Designmuster: TemplateMethod
Anwendungsbeispiel für Entwurfsmuster (Nr. 1)
Java-Anfänger-Entwurfsmuster (Factory-Methodenmuster)
Erinnerungsmuster
Vermittlermuster
Iteratormuster
Zusammengesetztes Muster
Beobachtermuster
Builder-Muster
Brückenmuster
Befehlsmuster
Strategiemuster
Iteratormuster
Besuchermuster
Adaptermuster
Strategiemuster
Zusammengesetztes Muster
Singleton-Muster
Singleton-Muster
Prototypmuster
[Entwurfsmuster] Allgemeine Logik mit der Vorlagenmethode
Fassadenmuster
Dekorationsmuster
Fliegengewichtsmuster
Dekorateur Muster
Vermittlermuster
Fassadenmuster
Besuchermuster
Brückenmuster
PrintObserver "Observer Design Pattern: Beschreibung und Implementierungsbeispiel"