Zusammenfassung des Java-Entwurfsmusters

Java Design Pattern Memorandum

  1. Iterator

Die Schleife kann unabhängig von den Daten durchgeführt werden. Ob es sich um eine Liste, ein Array, ein Set oder was auch immer handelt, es ist ein ähnlicher Aufruf.

  1. Adapter

Wenn Sie eine Funktion verwenden möchten, die in einer vorhandenen Klasse in einer anderen Klasse implementiert ist, führen Sie eine Typkonvertierung durch, damit die Funktion in dem Typ verwendet werden kann, den Sie verwenden möchten.

  1. Template Method

Durch die Verwendung der Vererbung können Sie die allgemeine Logik gemeinsam nutzen und gleichzeitig kleine Unterschiede in Unterklassen ausdrücken.

  1. Factory Method

Durch Implementieren des Hauptprogramms über die gemeinsame Factory-Schnittstelle und die Produktschnittstelle kann das Verhalten des generierten Produkts einfach durch Ändern des spezifischen Werkstyps (in der Schnittstelle implementiert) geändert werden.

  1. Singleton

Sie können die Klasseninstanz auf nur eine beschränken.

  1. Prototype

Durch vorherige Registrierung der Instanz jeder Klasse im Organizer (Prototyp-Rolle) ist es möglich, die erforderliche Instanz aus der im Organizer registrierten Instanz zu kopieren und zu erstellen.

  1. Builder

Es ähnelt der Vorlagenmethode, verwendet jedoch eher die Delegierung als die Vererbung und verwendet die Methoden der Klasse, die die subtilen Unterschiede darstellen, um die allgemeine Logik zu erstellen. Infolgedessen kann die Logik gemeinsam genutzt werden

  1. Abstract Factory

Verwenden Sie diese Option, wenn Sie etwas erstellen möchten (z. B. eine HTML-Datei). Die Schnittstelle der Methode, mit der die Teile erstellt werden, aus denen das gewünschte Objekt besteht, ist festgelegt, und Sie rufen die Methode mit einem beliebigen Argument so oft auf, wie Sie möchten, um das zu erstellen, was Sie erstellen möchten. Indem Sie die Implementierung der Methode, mit der die Teile erstellt werden, aus denen das gewünschte Produkt besteht, der Implementierungsklasse überlassen, können Sie den Unterschied ausdrücken und ihn resistent gegen Änderungen machen. Zum Beispiel beim Erstellen von HTML. Wenn Sie auf einen Linkteil klicken, können Sie durch Ändern der Implementierungsklasse ausdrücken, ob Sie auf derselben Registerkarte wechseln oder einen Link auf einer neuen Registerkarte öffnen möchten.

  1. Bridge

Sie können die Funktionsklasse und die Implementierungsklasse trennen (kleine Unterschiede). Das heißt, die Funktionsklasse erstellt die Logik unter Verwendung einer gemeinsamen Schnittstelle für die Implementierungsklasse. Auf diese Weise sollte beim Hinzufügen einer Funktion die Funktionsklasse hinzugefügt werden, und wenn das Verhalten (die Implementierung) geändert werden soll, sollte die Implementierungsklasse geändert werden.

  1. Strategy

Nur der Algorithmus kann durch Delegation umgeschaltet werden. Dies ermöglicht es, die Ausgabeberechnungsmethode für die Eingabe einfach umzuschalten. Beispielsweise können "schneller, aber ungenauer Algorithmus" und "langsamer, aber genauer Algorithmus" je nach Situation ordnungsgemäß verwendet werden.

  1. Composite

Machen Sie es möglich, den Behälter (Plural) und den Inhalt (einzeln) zu identifizieren. Beispielsweise entspricht bei der Implementierung von HashMap der Inhalt (einzeln) im Wesentlichen jedem Hashwert, aber wenn eine Kollision auftritt, entspricht dies dem Einfügen eines Containers (Plural) in den Hashwert.

  1. Decorator

Klassen, die dieselbe Schnittstelle implementieren, können durch Delegierung beliebig viele Funktionen hinzufügen. Das Bild ist für die Person, die den Schild aufgestellt hat

  1. Flammenneutralisationsbarriere hinzugefügt
  2. Wasserneutralisationsbarriere hinzugefügt
  3. Es wurde eine Barriere hinzugefügt, die sich nach einer bestimmten Zeit erholt

Wenn Sie darüber nachdenken, ist das Bild, dass Sie es beim Hinzufügen so hinzufügen können, wie es ist, und schließlich wird eine Person geboren, die alle Funktionen erworben hat. Dieses Muster wird von InputStreamReader, BufferReader, FileReader usw. von java.io verwendet.

  1. Visitor

Separate Datenstruktur und Verarbeitung. Wenn der Klasse, die die Datenstruktur ausdrückt, eine Klasse zugewiesen wird, die die Verarbeitung ausführt (was zu tun ist, hängt von der Implementierung ab), wird die Methode, die die Verarbeitung ausführt, durch Delegierung aufgerufen und die Daten werden verarbeitet.

14. Chain of Responsibility

Drehen Sie den Prozess durch Delegation um. Die Rolle des Handlers (Verarbeitungsrolle) führt nur die Verarbeitung aus, die von ihm selbst ausgeführt werden kann, und vertraut die Verarbeitung der nächsten Klasse an, wenn sie nicht in den Händen gehalten werden kann. Es ist auch möglich, die Klasse zu ändern, die während des Programmbetriebs verarbeitet wird. Als Nachteil kann die Verarbeitung langsam sein.

  1. Facade

Um die Anzahl der Schnittstellen zu verringern und eine Funktion auszudrücken, muss eine Methode aufgerufen werden. Der Prozess des Aufrufs anderer spezifischer Klassen konzentriert sich auf die Rolle Fassade.

  1. Mediator

Kombinieren Sie die Statusänderungslogik in einer Klasse. Durch Verwendung der Delegierung wird die Verarbeitung der Zielklasse gemäß der Statusänderung aufgerufen.

  1. Observer

Wirksam zur Beschreibung der Verarbeitung gemäß Zustandsänderungen. Die Rolle jedes Beobachters (Beobachters) wird in der Rolle des Subjekts registriert, und wenn sich der Status im Subjekt ändert, wird die Zielmethode des Beobachters durch Delegierung aufgerufen.

  1. Memento

Wird verwendet, wenn Sie den Status der Instanz speichern möchten. Die Rolle "Urheber" erstellt eine Memento-Rolle, wenn er seinen Status speichern möchte, und kehrt nach Ermessen der Rolle "Hausmeister" zu dem zuvor in Memento gespeicherten Status zurück. Zu diesem Zeitpunkt erweitert die Rolle von Memento die Schnittstelle für die Rolle des Absenders (z. B. das gleiche Paket) und verengt die Schnittstelle für die Rolle des Hausmeisters, damit die Kapselung nicht unterbrochen wird. (Reduzieren Sie die Methoden, die aufgerufen werden können.)

  1. State

Verwalten Sie den Status nach Klassen. Durch Überladen ist es möglich, die Verarbeitung basierend auf dem Status zu beschreiben, ohne eine bedingte Verzweigung wie eine if-Anweisung zu verwenden.

  1. Flyweight

Teilen Sie Ihre Instanz und verschwenden Sie keine neuen. Wenn eine Instanz erforderlich ist, wird sie aus der Factory-Klasse erstellt. Wenn die Instanz in der Factory-Klasse bereits vorhanden ist, wird die Instanz unverändert verwendet. Dies kann die für den Speicher erforderliche und neue Zeit (für die Verarbeitung des Konstruktors erforderliche Zeit) sparen.

  1. Proxy

Wenn die Subject-Rolle eine Klasse ist, die eine umfangreiche Verarbeitung durchführt, wird eine Proxy-Rolle als Ersatz dafür vorbereitet. Die Proxy-Rolle und die Betreff-Rolle teilen sich eine Schnittstelle, und die Proxy-Rolle führt die Verarbeitung so weit wie möglich durch, sodass die Betreff-Rolle erst in letzter Minute verwendet wird. Wie bei einem HTTP-Proxy besteht das Image darin, dass als Antwort auf eine Anforderung von einem Client Informationen nur dann vom Server abgerufen werden, wenn der Cache nicht vorhanden ist.

  1. Command

Verarbeitungsanweisungen als eine Instanz verwalten. Die Verwaltung des Befehlsverlaufs wird möglich. Bereiten Sie insbesondere eine Klasse vor, die detaillierte Anweisungen beschreibt, und eine Klasse, die diese Anweisungen in java.util.Stack speichert und verwaltet. Beide verwenden dieselbe Schnittstelle.

  1. Interpreter

Erstellen Sie mit der Java-Sprache eine einfache Sprache, die Ihrem Zweck entspricht. Sie können reguläre Ausdrücke und Stapelverarbeitungssprachen schreiben.

Recommended Posts

Zusammenfassung des Java-Entwurfsmusters
Java-Entwurfsmuster
[Entwurfsmuster] Java-Kernbibliothek
Java-Anfänger-Entwurfsmuster (Factory-Methodenmuster)
Zusammenfassung des Java-Wissens
Entwurfsmuster ~ Builder ~
Java Generics Zusammenfassung
Entwurfsmuster ~ Besucher ~
Java-Rückrufmuster
Entwurfsmuster ~ Proxy ~
Entwurfsmuster ~ Zustand ~
Entwurfsmuster ~ Strategie ~
Entwurfsmuster ~ Singleton ~
Entwurfsmuster ~ Composite ~
Entwurfsmuster (2): Builder
Entwurfsmuster (1): AbstractFactory
[Java] Singleton-Muster
Entwurfsmuster ~ Befehl ~
Entwurfsmuster ~ Iterator ~
Java-Entwurfsmuster
Entwurfsmuster ~ Fassade ~
Entwurfsmuster ~ Brücke ~
Zusammenfassung des Java 8-Dokuments
Entwurfsmuster ~ Mediator ~
Entwurfsmuster ~ Dekorateur ~
Entwurfsmuster ~ Interpreter ~
Entwurfsmuster ~ Beobachter ~
Entwurfsmuster ~ Prototyp ~
Entwurfsmuster ~ Memento ~
Zusammenfassung des Java 11-Dokuments
Entwurfsmuster ~ Adapter ~
Entwurfsmuster ~ Fliegengewicht ~
Java-Muster-Memo
Zusammenfassung der neuen Funktionen von Java 12
C ++ - Entwurfsmuster (TemplateMethod-Muster)
Mein DAO-Muster (Java)
Entwurfsmuster ~ Abstrakte Fabrik ~
[Zusammenfassung] Zum Beispiel die Vorbereitung der Java-Umgebung
effektive Java 3. Zusammenfassung
Zusammenfassung der neuen Funktionen von Java 13
Java statisch [Persönliche Zusammenfassung]
Thread sichere Zusammenfassung ~ Java ~
Zusammenfassung der primitiven Java-Spezialisierung
Zusammenfassung des Java-Entwicklungslinks
Persönliche Zusammenfassung über Java
Zusammenfassung der neuen Funktionen von Java 10
Entwurfsmuster ~ Vorlagenmethode ~
Builder-Muster (effektives Java)
Zusammenfassung der neuen Funktionen von Java 14
Zusammenfassung der Java-Unterstützung 2018
Überdenken des Entwurfsmusters mit Java8 Lambda-Ausdruck & Stream - Befehlsmuster -
Java-Zusammenfassung für reservierte Wörter
Grobe Zusammenfassung des Java8-Streams
Überdenken von Entwurfsmustern mit Java8-Lambda-Ausdrücken und Stream - Null-Objektmuster -
Überdenken des Java8-Lambda-Ausdrucks- und Stream-Entwurfsmusters - Muster der Vorlagenmethode -
Entwurfsmuster ~ Verantwortungskette ~
Was ist Java Assertion? Zusammenfassung.
[Java11] Stream-Zusammenfassung - Vorteile von Stream -
[Java] Zusammenfassung der regulären Ausdrücke
[Java] Zusammenfassung der Operatoren (Operator)