[JAVA] PrintObserver "Observer Design Pattern: Beschreibung und Implementierungsbeispiel"

Vor kurzem habe ich mit verschiedenen Terminaltypen für die JavaFX-Anwendung meines Projekts experimentiert.

Wenn eine Anwendung versucht, etwas zu drucken, sollten Terminals sowohl vom Systemterminal als auch von der Ansicht des Anwendungsterminals und anderen zukünftigen Ansichten die Zeichenfolge anzeigen können.

Wir haben nun festgestellt, dass das Beobachtermuster der beste Weg ist, um dieses Problem zu lösen.

Was ist ein Beobachtermuster?

Beobachter = Beobachter

Dieses Muster ist ein Muster, bei dem das Beobachterobjekt eine Benachrichtigung über die Zustandsänderung von dem zu beobachtenden Objekt erhält und eine Verarbeitung ausführt, die es verkörpert.

Die Vorteile dieses Musters sind:

  1. Beschreiben Sie die Kopplung zwischen Objekt und Betrachter.

  2. Unterstützt die Broadcast-Kommunikation.

wie benutzt man:

  1. Wenn es notwendig ist, Änderungen im Zustand eines Objekts auf ein anderes Objekt zu übertragen, während die Objekte eng miteinander verbunden bleiben.

  2. Wenn es notwendig ist, einen neuen Beobachter mit minimalen Änderungen in der Zukunft hinzuzufügen.

Beispiel-Druckbeobachter

PrintObserverUML.png

Rolle

PrintObserver << Abstract Class >>:

Alle untergeordneten Knoten dieser Klasse können gültige Terminaltypen hinzufügen, entfernen und "(Klassen, die Printable implementieren)".

PrintObserver.java


import java.util.ArrayList;

public abstract class PrintObserver {
    private final ArrayList<Printable> printerList = new ArrayList<>();

    public void notifyAllPrinters(String toPrint) {
        if(!toPrint.equals("")) {
            for(Printable printer : printerList) {
                System.out.println("\n");
                printer.print(toPrint);
            }
        } else {
            System.out.println("Quitting! Thank you!");
        }
    }
    
    public void addPrinter(Printable printer) {
        this.printerList.add(printer);
    }
    
    public void removePrinter(Printable printer) {
        this.printerList.remove(printer);
    }
}

Druckbare << Schnittstelle >>:

Alle Klassen, die diese Schnittstelle implementieren, sind Beobachter, die darauf warten, dass etwas gedruckt wird.

Printable.java


public interface Printable {
    void print(String toPrint);
}

PrintTerminal A und Piikun:

Es implementiert Printable. Wenn also ein untergeordneter Knoten von PrintObserver dieses Printable hinzufügt und eine Funktion namens notifyAllObservers aufruft, wird es gedruckt.

** Jeder Ausdruck enthält eine eigene Druckimplementierung, die von den anderen Ausdrucken unabhängig ist. ** **.

PrintTerminalA.java


public class PrintTerminalA implements Printable {
    @Override
    public void print(String toPrint) {
        System.out.println("This is terminal A");
        System.out.println("It seems that someone has printed this message: "+toPrint);
    }
}

Piikun.java


public class Piikun implements Printable
{
    @Override
    public void print(String toPrint) {
        System.out.println("Hallo! Das ist Pee!");
        System.out.println("Vielen Dank, dass Sie mir gesendet haben, was Sie drucken möchten. Die Nachricht ist hier:");
        System.out.println(toPrint);
    }
    
}

PrintSource << Main >>:

Enthält die Hauptmethode. Fügen Sie der Liste ein druckbares Beispiel hinzu und senden Sie Benutzereingaben an alle druckbaren Klassen.

PrintSource.java


import java.util.Scanner;

public class PrintSource extends PrintObserver {
    
    public PrintSource() {
        addPrinter(new PrintTerminalA());
        addPrinter(new Piikun());
        
        String toPrint = "~";
        while(!toPrint.equals("")) {
            System.out.print("\n\nEnter String to print: ");
            Scanner sc = new Scanner(System.in);
            toPrint = sc.nextLine();
            
            notifyAllPrinters(toPrint);
        }
    }
    
    public static void main(String[] args) {
        PrintSource printSource = new PrintSource();
    }
}

Laden Sie dieses Projekt auf github herunter:

[Github:] https://github.com/CoralBeef-zz/PrintObserverExample

Recommended Posts

PrintObserver "Observer Design Pattern: Beschreibung und Implementierungsbeispiel"
Anwendungsbeispiel für Entwurfsmuster (Nr. 1)
BloomFilter-Beschreibungs- und Implementierungsbeispiel (JAVA)
Beobachtermuster
Java- und Swift-Vergleich (3) Klassenimplementierung / Klassenvererbung / Klassendesign
Entwurfsmuster ~ Besucher ~
Java-Entwurfsmuster
Entwurfsmuster ~ Proxy ~
Entwurfsmuster ~ Zustand ~
Entwurfsmuster ~ Strategie ~
Entwurfsmuster ~ Singleton ~
Entwurfsmuster ~ Composite ~
Entwurfsmuster (2): Builder
Entwurfsmuster (1): AbstractFactory
Entwurfsmuster ~ Befehl ~
Entwurfsmuster ~ Iterator ~
Entwurfsmuster ~ Brücke ~
Entwurfsmuster ~ Mediator ~
Entwurfsmuster ~ Dekorateur ~
Entwurfsmuster ~ Prototyp ~
Entwurfsmuster ~ Memento ~
Entwurfsmuster ~ Adapter ~
Entwurfsmuster ~ Fliegengewicht ~