[GO] Verstehen Sie Entwurfsmuster, indem Sie Implementierungen in JavaScript und Java vergleichen. [Von Zeit zu Zeit aktualisiert]

Einführung

Ich beschloss, in einem Universitätslabor ein Entwurfsmuster in Python zu schreiben. Obwohl ich das Entwurfsmuster nicht richtig verstand, hatte ich das Gefühl, dass ich es nicht in Python schreiben konnte. Vergleichen und verstehen wir also die Entwurfsmuster von Java und Ihrem bevorzugten JavaScript. Wenn Sie alle Muster in diesem Artikel schreiben, wird es lang sein, also werde ich für jedes Muster einen Artikel erstellen und die folgende Tabelle ausfüllen.

Was ist ein Designmuster?

Zoll, um häufig auftretende Probleme im Software-Design zu lösen und wiederverwendbar zu machen 23 Arten von GoF-Designmustern (Gang of Four) sind berühmt GoF ist "Erich Gamma", "Richard Helm", "Ralph Johnson", "John Brisidis" Einführung des Begriffs Entwurfsmuster in die Softwareentwicklung zum ersten Mal in "Entwurfsmuster zur Wiederverwendung in der Objektorientierung".

Entwurfsmusterkategorie

Entwurfsmuster können aus verschiedenen Perspektiven kategorisiert werden

Generationsmuster

** Lösen Sie das Problem, indem Sie sich auf den Mechanismus zum Erstellen von Objekten konzentrieren und den Prozess der Objekterstellung steuern **

Mustername Überblick
Factory Method Erstellen Sie eine Instanz einer abgeleiteten Klasse basierend auf den übergebenen Daten und Ereignissen
Abstract Factory Erstellen Sie eine Instanz einer Klasse, ohne die Details der konkreten Klasse preiszugeben
Builder Trennen Sie den Vorgang zum Erstellen eines Objekts vom Darstellungsformular. Erstellen Sie immer den gleichen Objekttyp
Prototype Verwenden Sie beim Kopieren eine vollständig initialisierte Instanz
Singleton Eine Klasse mit nur einer Instanz, auf die global zugegriffen werden kann

Strukturmuster

** Es geht um das Zusammensetzen von Objekten und wird verwendet, um das Verständnis der Beziehungen zwischen verschiedenen Objekten zu erleichtern **

Mustername Überblick
Adapter Machen Sie Schnittstellen verschiedener Klassen kompatibel, sodass auch Klassen, die die Schnittstellen nicht unterstützen, in Kombination verwendet werden können.
Bridge Trennen Sie die Schnittstelle des Objekts von der Implementierung, sodass die Schnittstelle und die Implementierung unabhängig voneinander geändert werden können
Composite Indem Sie die Struktur einzelner Objekte und Verbundwerkstoffe einheitlich behandeln, können Sie mehr tun, als sie separat zu behandeln.
Decorator Fügen Sie einem Objekt dynamisch die Verarbeitung hinzu
Facade Eine Klasse verbirgt die Komplexität des gesamten Subsystems
Flyweight Verwenden Sie kleine Instanzen, um Informationen, die überall verwendet werden, effizient auszutauschen
Proxy Ersatzobjekt, um das reale Objekt zu ersetzen

Verhaltensmuster

** Konzentriert sich auf die Verbesserung und Vereinfachung der Kommunikation zwischen verschiedenen Objekten im System **

Mustername Überblick
Interpreter Fügen Sie Ihrer Anwendung sprachliche Elemente hinzu, um die Grammatik der Zielsprache zu berücksichtigen
Template Method Erstellen Sie einen Teil des Algorithmus in der Methode und verzögern Sie den Schritt zur Unterklasse
Chain of Responsibility So übergeben Sie Anforderungen nacheinander in einer Reihe von Objekten und finden ein Objekt, das dieses Element verarbeiten kann
Command Trennen Sie die Befehlsausführungsoperation von der Position, an der der Befehl ausgegeben wird
Iterator Greifen Sie nacheinander auf die Elemente der Sammlung zu, ohne das interne Verhalten der Sammlung zu kennen
Mediator Vereinfachen Sie die Interaktionen zwischen Klassen und verhindern Sie, dass Klassen direkt aufeinander verweisen
Memento Notieren Sie den internen Status des Objekts, damit es später wiederhergestellt werden kann
Observer So benachrichtigen Sie viele Klassen von Änderungen und stellen die Konsistenz zwischen Klassen sicher
State Ändern Sie das Verhalten eines Objekts, wenn sich der Status ändert~
Strategy Verkapselt Algorithmen innerhalb einer Klasse und macht die Algorithmusauswahl unabhängig von der Klassenimplementierung
Visitor Fügen Sie einer Klasse eine neue Operation hinzu, ohne sie zu ändern

Referenz

[Einführung in Entwurfsmuster, die in der erweiterten und überarbeiteten Java-Sprache gelernt wurden](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82% E7% 89% 88Java% E8% A8% 80% E8% AA% 9E% E3% 81% A7% E5% AD% A6% E3% 81% B6% E3% 83% 87% E3% 82% B6% E3% 82% A4% E3% 83% B3% E3% 83% 91% E3% 82% BF% E3% 83% BC% E3% 83% B3% E5% 85% A5% E9% 96% 80-% E7% B5 % 90% E5% 9F% 8E-% E6% B5% A9 / dp / 4797327030) JavaScript-Entwurfsmuster

Recommended Posts

Verstehen Sie Entwurfsmuster, indem Sie Implementierungen in JavaScript und Java vergleichen. [Von Zeit zu Zeit aktualisiert]
[Von Zeit zu Zeit aktualisiert] Zusammenfassung der Entwurfsmuster in Java
Verstehen Sie das Strategiemuster, indem Sie JavaScript und Java-Code vergleichen
Verstehen Sie das Decorator-Muster, indem Sie JavaScript und Java-Code vergleichen
Verstehen Sie das Statusmuster, indem Sie JavaScript und Java-Code vergleichen
Verstehen Sie das zusammengesetzte Muster, indem Sie JavaScript und Java-Code vergleichen
[Von Zeit zu Zeit aktualisiert] LetCode-Algorithmus und Bibliothek
Zusammenfassung von Anfang bis Kapitel 1 der Einführung in Entwurfsmuster, die in der Java-Sprache gelernt wurden
vtkXMLUnstructuredGridReader Zusammenfassung (von Zeit zu Zeit aktualisiert)
Zusammenfassung von Kapitel 2 der Einführung in Entwurfsmuster, die in Java gelernt wurden
vtkOpenFOAMReader-Zusammenfassung (von Zeit zu Zeit aktualisiert)
Ingenieur-Wortbuch (von Zeit zu Zeit aktualisiert)
Kapitel 4 Zusammenfassung der Einführung in Entwurfsmuster, die in Java gelernt wurden
Zusammenfassung von Kapitel 3 der Einführung in Entwurfsmuster, die in Java gelernt wurden
Tensorflow-Memo [von Zeit zu Zeit aktualisiert]
Privates Python-Handbuch (von Zeit zu Zeit aktualisiert)
vtkClipPolyData / DataSet-Zusammenfassung (von Zeit zu Zeit aktualisiert)
[Von Zeit zu Zeit aktualisiert] Hinweise zum Postmarket-Betriebssystem
Zusammenfassung von vtkThreshold (von Zeit zu Zeit aktualisiert)
Zusammenfassung der gcc-Optionen (von Zeit zu Zeit aktualisiert)
Hinweise zum maschinellen Lernen (von Zeit zu Zeit aktualisiert)
OpenFOAM-Spickzettel für die Nachbearbeitung (von Zeit zu Zeit aktualisiert)
progate Python-Lernnotiz (von Zeit zu Zeit aktualisiert)
Zur Darstellung von Datum, Uhrzeit, Uhrzeit und Sekunden in Python
Nützliche Hilfeseiten usw. (von Zeit zu Zeit aktualisiert)
Memorandum über Befehle, Pakete, Begriffe usw., die unter Linux verwendet werden (von Zeit zu Zeit aktualisiert)
Konvertieren Sie Datum und Uhrzeit in Zeitzonen in Unixtime in Python2.7
So messen Sie die Verarbeitungszeit mit Python oder Java
Apache-Einstellungen, Protokollbestätigung usw. (* Von Zeit zu Zeit aktualisiert)
[Von Zeit zu Zeit aktualisiert] Überprüfung von Let Code NumPy
Ich habe die Chainer-Referenz gelesen (von Zeit zu Zeit aktualisiert).
Liste meiner Artikel, die für Wettkampfprofis nützlich sein können (von Zeit zu Zeit aktualisiert)