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.
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.
Beschreiben Sie die Kopplung zwischen Objekt und Betrachter.
Unterstützt die Broadcast-Kommunikation.
Wenn es notwendig ist, Änderungen im Zustand eines Objekts auf ein anderes Objekt zu übertragen, während die Objekte eng miteinander verbunden bleiben.
Wenn es notwendig ist, einen neuen Beobachter mit minimalen Änderungen in der Zukunft hinzuzufügen.
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);
}
}
Alle Klassen, die diese Schnittstelle implementieren, sind Beobachter, die darauf warten, dass etwas gedruckt wird.
Printable.java
public interface Printable {
void print(String toPrint);
}
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);
}
}
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();
}
}
[Github:] https://github.com/CoralBeef-zz/PrintObserverExample
Recommended Posts