[GO] Fassadenmuster in Java

Einführung

Einführung in die Entwurfsmuster von [GoF](https://ja.wikipedia.org/wiki/Gang of for _ (Information Engineering)) ["Einführung in Entwurfsmuster, die in der erweiterten und überarbeiteten Java-Sprache gelernt wurden"]( https://www.amazon.co.jp/ Ergänzende überarbeitete Ausgabe Einführung in in Java gelernte Entwurfsmuster-Yuki-Hiroshi / dp / 4797327030 / ref = pd_lpo_sbs_14_t_0? _ Encoding = UTF8 & psc = 1 & refRID = 2ZE4GPYNN55JGR Ich werde über zusammenfassen.

Fassadenmuster

Was ist Fassade?

Übersetzt ins Japanische bedeutet es "Vorderseite (des Gebäudes)". Wenn Sie ein Programm verwenden, das mehrere Klassen umfasst, müssen Sie die Methoden jeder Klasse in der richtigen Reihenfolge ausführen. Beispiel: "Wenn Sie Prozess X ausführen möchten, rufen Sie die B-Methode der A-Klasse, dann die D- und E-Methoden der C-Klasse und schließlich die G-Methode der F-Klasse auf." Im obigen Beispiel gab es nicht so viele Klassen und Methoden, aber je höher die Anzahl, desto komplexer ist die Steuerung von Klassen und Methoden bei der ** Verarbeitung. ** ** ** In einem solchen Fall wird das Muster **, das eine Schnittstelle (API) bereitstellt, die als "Fenster" dient, wenn es vom Verarbeitungsanforderer betrachtet wird, als ** Fassadenmuster ** bezeichnet. Durch Anwenden dieses Musters muss der Anforderer die Steuerung der komplizierten Verarbeitung nicht kennen.

Charakter

Das Fassadenmuster wird von den Klassen verwendet, die im folgenden Klassendiagramm angezeigt werden. image.png

Implementierungsklasse

Konkretes Beispiel

Als konkretes Beispiel werden wir anhand der folgenden Klasse erklären. image.png

Implementierungsklasse

ListFacade.java


import java.io.FileWriter;
import java.io.IOException;
import java.util.Map;
import java.util.Properties;

public class ListFacade {
	private ListFacade() { //Private Deklaration zur Verhinderung der Instanziierung mit neuen
	}

	public static void makeMemberList(String inputFileName, String outputFileName) {
		try {
			Properties memberProperties = MemberList.getProperties(inputFileName);
			outputFileName = "C:\\work\\Facade\\src\\" + outputFileName + ".txt";
			TxtWriter writer = new TxtWriter(new FileWriter(outputFileName));
			Map<String, String> propertiesMap = writer.toMap(memberProperties);
			writer.writeHeader();
			writer.writeContents(propertiesMap);
			writer.writeFooter();
			writer.close();
			System.out.println(String.format("Geben Sie die Datei aus. Dateiname:%s", outputFileName));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

Die "ListFacade" -Klasse ist der Kontaktpunkt für die "Main" -Klasse, bei der es sich um den Client handelt. Sie können sehen, dass nur die statis-Methode makeMemberList definiert ist. Sie empfängt eine Eigenschaft von der MemberList-Klasse, empfängt eine Map basierend auf dieser Eigenschaft und gibt sie in eine Datei aus. Wenn der Vorgang erfolgreich ist, wird eine Meldung an die Konsole ausgegeben, die angibt, dass die Datei ausgegeben wurde. Der einzige Punkt ist, dass ** der Ablauf dieser Prozesse in der Klasse "ListFacade" beschrieben wird, die der Kontaktpunkt ist, nicht in der Klasse "Main" **. Lernmuster sind nicht besonders schwierig.

MemberList.java


import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

public class MemberList {
	private MemberList() { //Private Deklaration zur Verhinderung der Instanziierung mit neuen
	}

	public static Properties getProperties(String fileName) { //Eigenschaften vom Dateinamen abrufen
		fileName = "C:\\work\\Facade\\src\\" + fileName + ".txt";
		Properties properties = new Properties();
		try {
			properties.load(new FileInputStream(fileName));
		} catch (IOException e) {
			System.out.println(String.format("Fehler beim Lesen der Datei. Dateiname:%s", fileName));
		}
		return properties;
	}
}

Dies ist die erste von zwei anderen Klassen. Es wird nur die statische Methode "getProperties" definiert, die die Eigenschaftendatei durch Empfang des Dateinamens zurückgibt. Es gibt nichts besonders Schwieriges.

TxtWriter.java


import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;

public class TxtWriter {
	private Writer writer;

	public TxtWriter(Writer writer) { //Konstrukteur
		this.writer = writer;
	}

	//Immobilienwert erhalten(Schlüssel)Speichert mehr als 25 in Map
	public Map<String, String> toMap(Properties properties) {
		Map<String, String> propertiesMap = new HashMap<>();
		for (Entry<Object, Object> e : properties.entrySet()) {
			if (Integer.parseInt((String) e.getValue()) > 25) {
				propertiesMap.put(e.getKey().toString(), e.getValue().toString());
			}
		}
		return propertiesMap;
	}

	//Kopfzeile ausgeben
	public void writeHeader() throws IOException {
		writer.write("***************Header***************");
		writer.write(System.lineSeparator());
	}

	//Inhalt ausgeben
	public void writeContents(Map<String, String> propertiesMap) throws IOException {
		writer.write("Die folgenden Mitglieder sind über 25 Jahre alt.");
		writer.write(System.lineSeparator());
		for (Entry<String, String> e : propertiesMap.entrySet()) {
			writer.write("·Name:" + e.getKey() + "Alter:" + e.getValue());
			writer.write(System.lineSeparator());
		}
	}

	//Fußzeile ausgeben
	public void writeFooter() throws IOException {
		writer.write("***************Footer***************");
	}

	//schließen
	public void close() throws IOException {
		writer.close();
	}

}

Dies ist die zweite der anderen Klassen. Einige Methoden sind definiert, z. B. eine Methode, die Eigenschaften empfängt und in Map speichert, und eine Methode, die sie in eine Textdatei ausgibt. Dies ist jedoch nicht besonders schwierig.

Andere

memberList.txt


#name=age
Tanaka_Tarou=25
Hoge_Hogeko=10
Yamada_Hanako=30
Neko_Nekota=50
Foo_Footarou=80

Dies ist die Textdatei, die von der MemberList-Klasse gelesen werden soll. Der Schlüssel ist der Name und der Wert ist das Alter.

Ausführungsklasse

-** Hauptklasse **

Main.java


import java.io.FileWriter;
import java.io.IOException;
import java.util.Map;
import java.util.Properties;

public class Main {
	public static void main(String[] args) {

		// 1.Beim Anwenden des Fassadenmusters
		ListFacade.makeMemberList("memberList", "outputFile1");

		// 2.Wenn das Fassadenmuster nicht angewendet wird
		try {
			String inputFileName = "memberList";
			String outputFileName = "outputFile2";

			Properties memberProperties = MemberList.getProperties(inputFileName);
			outputFileName = "C:\\work\\Facade\\src\\" + outputFileName + ".txt";
			TxtWriter writer = new TxtWriter(new FileWriter(outputFileName));
			Map<String, String> propertiesMap = writer.toMap(memberProperties);
			writer.writeHeader();
			writer.writeContents(propertiesMap);
			writer.writeFooter();
			writer.close();
			System.out.println(String.format("Geben Sie die Datei aus. Dateiname:%s", outputFileName));
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}

** 1. Wenn das Fassadenmuster angewendet wird **, können Sie die gewünschte Verarbeitung ausführen, indem Sie einfach die statische Methode makeMemberList für die KlasseListFacade aufrufen, die der Kontaktpunkt ist. Wenn Sie den Vorgang mehrmals ausführen möchten, können Sie die Methode auch auf dieselbe Weise aufrufen. , ** 2. Wenn das Fassadenmuster nicht angewendet wird ** Im Fall von ** kann die Zielverarbeitung nur ausgeführt werden, wenn die in der Klasse "ListFacade" beschriebenen Inhalte so beschrieben werden, wie sie sind. Wenn Sie die Verarbeitung mehrmals ausführen möchten, müssen Sie so viele komplizierte Prozesse beschreiben, wie Sie ausführen möchten.

(*** Dieses Mal werden andere Klassen aus der Hauptklasse verwendet, aber es ist möglich, dass Sie andere Klassen nur aus dem Fenster heraus verwenden können, indem Sie protected angeben, indem Sie das Paket teilen **. Um den Unterschied zwischen der Verwendung von Facade und der Nichtverwendung von Facade leichter verständlich zu machen, kann hier auch vom Client aus aufgerufen werden. )

Ausführungsergebnis

Das Ergebnis der Ausführung von "Main.java" ist wie folgt. Sie können sehen, dass es keinen Unterschied in den Verarbeitungsergebnissen gibt, wann das Muster angewendet wird und wann es nicht angewendet wird.

Ausführungsergebnis(Konsole)


Geben Sie die Datei aus. Dateiname:C:\work\Facade\src\outputFile1.txt
Geben Sie die Datei aus. Dateiname:C:\work\Facade\src\outputFile2.txt

Ausführungsergebnis(outputFile1.txt)


***************Header***************
Die folgenden Mitglieder sind über 25 Jahre alt.
・ Name: Yamada_Hanako Alter: 30 Jahre
・ Name: Foo_Footarou Alter: 80 Jahre
・ Name: Neko_Nekota Alter: 50
***************Footer***************

Ausführungsergebnis(outputFile2.txt)


***************Header***************
Die folgenden Mitglieder sind über 25 Jahre alt.
・ Name: Yamada_Hanako Alter: 30 Jahre
・ Name: Foo_Footarou Alter: 80 Jahre
・ Name: Neko_Nekota Alter: 50
***************Footer***************

verdienen

Die Vorteile des Fassadenmusters sind wie folgt. ** 1. ** Der Code kann vereinfacht werden, da der Anrufer keine detaillierten Steuerelemente schreiben muss. ** 2. ** Sie können verhindern, dass unbeabsichtigte Anrufe zu Fehlern werden. ** 3. ** Durch Eingrenzen des Anrufports der Schnittstelle kann diese lose mit der Außenseite gekoppelt werden, und die Wiederverwendbarkeit wird verbessert.

Zusammenfassung

Sie haben das Fassadenmuster kennengelernt, das ein Fenster zur Steuerung komplexer Prozesse bietet. Der Beispielcode wird unten hochgeladen. Wenn Sie möchten, lesen Sie ihn bitte.

Darüber hinaus sind unten weitere Entwurfsmuster zusammengefasst. Bitte beziehen Sie sich auch auf diese.

Verweise

Recommended Posts

Fassadenmuster in Java
Singleton-Muster in Java
Fliegengewichtsmuster in Java
Beobachtermuster in Java
Iteratormuster in Java
Dekorationsmuster in Java
Prototypmuster in Java
Proxy-Muster in Java
Muster der Vorlagenmethode in Java
Muster der Verantwortungskette in Java
Entwurfsmuster #Facade
Singleton-Muster in Python
Linux-Berechtigungen für Java
Verwenden Sie DataFrame in Java
Besuchermuster in Python
Implementieren Sie einen tabellengesteuerten Test in Java
Signale in Java erkennen und verarbeiten.
Implementieren Sie das Singleton-Muster in Python
Implementierte Blasensortierung in Java (BubbleSort)
Grobe Zusammenfassung des GoF-Java-Entwurfsmusters
Entwerfen Sie Muster für häufig verwendete Java-Bibliotheken - Fassadenmuster
Überlappende reguläre Ausdrücke in Python und Java
Lernen Sie das Entwurfsmuster "Prototype" mit Python
Lernen Sie das Entwurfsmuster "Builder" mit Python
Lernen Sie das Designmuster "Flyweight" in Python
Lernen Sie das Entwurfsmuster "Observer" in Python
Lernen Sie das Entwurfsmuster "Memento" mit Python
Lernen Sie das Entwurfsmuster "Proxy" in Python
Express Python-Ertrag in JavaScript oder Java
Wenden Sie den Google Java Style-Formatierer mit IntelliJ an
Lernen Sie das Entwurfsmuster "Befehl" in Python
Unterschiede zwischen Python- und Java-Syntax
Erhalten Sie E-Mails mithilfe der Google Mail-API in Java
Lernen Sie das Entwurfsmuster "Besucher" mit Python
Lernen Sie das Entwurfsmuster "Bridge" mit Python
Lernen Sie das Entwurfsmuster "Mediator" mit Python
Lernen Sie das Designmuster "Decorator" mit Python
[Viererbande] Designmuster lernen - Fassade
Lernen Sie das Entwurfsmuster "Iterator" mit Python
Lernen Sie das Entwurfsmuster "Strategie" mit Python
Lernen Sie das Entwurfsmuster "Composite" mit Python
Lernen Sie das Entwurfsmuster "State" in Python
Lassen Sie uns das Bash-Skript in Java ausführen
Lernen Sie das Entwurfsmuster "Adapter" mit Python
Lernen Sie das Designmuster "Facade" mit Python