[PYTHON] Zusammenfassung von Kapitel 3 der Einführung in Entwurfsmuster, die in Java gelernt wurden

Lange nicht gesehen. Es ist weiß. Neulich kennen leitende Ingenieure das Entwurfsmuster nicht! ?? Danach erhielt ich eine "Einführung in Designmuster, die in Java gelernt wurden", geschrieben von Hiroshi Yuki, und entschied mich zu studieren. Selbst wenn ich das Buch lese, kann ich mich nicht daran erinnern, deshalb habe ich beschlossen, es als Memorandum zu schreiben. Ich werde mein Bestes geben, damit ich das Rennen beenden kann. Darüber hinaus gibt es ein Beispielprogramm in "Einführung in in Java-Sprache erlernte Entwurfsmuster", das wir jedoch aus urheberrechtlichen Gründen weglassen werden. Bitte verstehe.

Letztes Mal habe ich einen Artikel über "Adaptermuster" geschrieben. Der vorherige Artikel ist unten. https://qiita.com/sirajirasajiki/items/0d58a3b9fe9bdb460d0d

Dieses Mal möchte ich das "Muster der Vorlagenmethode" beschreiben. Darüber hinaus gibt es ein Beispielprogramm in "Einführung in in Java-Sprache erlernte Entwurfsmuster", das wir jedoch aus urheberrechtlichen Gründen weglassen werden. Bitte verstehe.

Kapitel 3 Vorlagenmethode - Überlassen Sie die spezifische Verarbeitung den Unterklassen

Kennen Sie das Genre der leichten Reinkarnationen? Grundsätzlich hat das Genre der wiedergeborenen Dinge einen festen Fluss, wie das Sterben der Hauptfigur → einen Betrug von Gott bekommen → in einer anderen Welt wiedergeboren werden → einen großen Erfolg in einer anderen Welt erzielen. So etwas, das als Vorlage verwendet werden kann, wird als Vorlage bezeichnet. Selbst wenn Sie die Vorlage verwenden, unterscheiden sich der Grund, warum die Hauptfigur stirbt, der von Gott erhaltene Betrug, das Weltbild des wiedergeborenen Ziels, der Inhalt der wiedergeborenen Aktivität usw. je nach Roman. Die Grundidee und der Ablauf der Geschichte ändern sich nicht, aber die Person, die sie tatsächlich macht, entscheidet, was in jeder Szene zu tun ist.

Auf diese Weise wird eine Methode, die die Klasse erbt, die das Verarbeitungsframework bestimmt, eine Unterklasse erstellt und die tatsächliche Verarbeitung innerhalb der Unterklasse bestimmt, als "Muster der Vorlagenmethode" bezeichnet.

Warum brauchst du so ein Muster?

Wenn Sie viele verschiedene Klassen erstellen, die mit demselben Algorithmus durch Kopieren und Einfügen ohne Verwendung des Musters "Vorlagenmethode" verarbeitet werden, oder wenn Sie einen Fehler im Algorithmus finden, der denselben verarbeitet, kopieren und einfügen Sie müssen alle von Ihnen erstellten Klassen ändern. Mithilfe des Musters "Vorlagenmethode" können Sie alle geerbten Klassen ändern, indem Sie nur die Oberklasse ändern.

Als konkretes Beispiel gab es auch "Einführung in in Java Language gelernte Entwurfsmuster",

"Zeichen und Zeichenfolgen 5 Mal wiederholt anzeigen"

Ich würde gerne darüber nachdenken, den Inhalt zu verwenden. Fügen Sie jedoch vor und nach der Anzeige von Zeichen und Zeichenfolgen Kopf- und Fußzeilen hinzu. Die Methode zum Hinzufügen einer Kopfzeile ist "offen", die Methode zum Hinzufügen einer Fußzeile ist "schließen", die Methode zum Anzeigen von Zeichen und Zeichenfolgen ist "print_string" und die Methode zum wiederholten 5-maligen Anzeigen von Zeichen und Zeichenfolgen ist "display". Wird besorgt. In der Oberklasse wird angenommen, dass die drei Methoden "open", "close" und "print_string" abstrakte Methoden sind und nur "display" implementiert ist. Es wird angenommen, dass die in der Oberklasse implementierte "display" -Methode drei Methoden verwendet: "open", "close" und "print_string".

Angenommen, Sie möchten an einer Stelle den Teil ändern, der "Zeichen und Zeichenfolgen fünfmal wiederholt anzeigt", in "Zeichen und Zeichenfolgen dreimal wiederholt anzeigen". Wenn Sie mehrere Klassen erstellen, indem Sie den Verarbeitungsteil der Superklasse kopieren und einfügen, ohne die Superklasse zu erben, müssen Sie ihn in allen Klassen ändern. Wenn Sie jedoch eine Klasse durch Erben der Oberklasse erstellt haben, können Sie diese problemlos ändern, indem Sie nur die Oberklasse ändern.

Auf diese Weise kann beim Erstellen mehrerer Prozesse desselben Algorithmus unter Verwendung des "Vorlagenmethodenmusters", selbst wenn sich der Prozess des gemeinsamen Teils ändert, dieser problemlos behandelt werden.

Wie in "Einführung in in Java gelernte Entwurfsmuster" erwähnt,

Es ist wichtig, den Prozessablauf in der abstrakten Klassenphase zu gestalten.

Das habe ich mir nochmal gedacht.

Vorsichtsmaßnahmen bei Verwendung des Musters "Vorlagenmethode"

Unterklassen, die mit dem Muster "Vorlagenmethode" erstellt wurden, verwenden die in der Vorlagen-Oberklasse festgelegten Algorithmen unverändert. Daher ist es notwendig, eine Unterklasse zu erstellen, nachdem Sie verstanden haben, was die Oberklasse tut.

Beispiel für eine Vorlagenmethode

Erstellen Sie ein Klassendiagramm und Python-Code anhand des Beispiels in "Einführung in in der Java-Sprache erlernte Entwurfsmuster". Die Methode zum Hinzufügen einer Kopfzeile ist "offen", die Methode zum Hinzufügen einer Fußzeile ist "schließen", die Methode zum Anzeigen von Zeichen und Zeichenfolgen ist "print_string" und die Methode zum wiederholten 5-maligen Anzeigen von Zeichen und Zeichenfolgen ist "display". Wird besorgt. In der Oberklasse wird angenommen, dass die drei Methoden "open", "close" und "print_string" abstrakte Methoden sind und nur "display" implementiert ist. Es wird angenommen, dass die in der Oberklasse implementierte "display" -Methode drei Methoden verwendet: "open", "close" und "print_string".

Klassen Diagramm

template_method.png

Dieses Klassendiagramm wird als PlantUML bezeichnet. Der PlantUML-Code, den ich geschrieben habe, befindet sich auf dem GitHub unten. Lesen Sie daher bitte Read Me, bevor Sie ihn verwenden. template_method.txt. https://github.com/sirajirasajiki/design_pattern_uml/tree/master/template_method Einzelheiten zur Installation und Verwendung von PlantUML finden Sie im Anhang unten.

In Python basierend auf dem Klassendiagramm implementiert

Der unten implementierte Code ist verfügbar. Implementiert in Python 3.7. https://github.com/sirajirasajiki/design_pattern_python/tree/master/TemplateMethod

Zusammenfassung

Ich habe etwas über das "Muster der Vorlagenmethode" gelernt, das das Verarbeitungsframework in der Superklasse definiert und die spezifische Verarbeitung in der Unterklasse beschreibt.

Kapitel 3 Impressionen

Durch Hinzufügen einer bestimmten Verarbeitung in der Phase der Superklasse kann bis zu einem gewissen Grad entschieden werden, wie diese in der Unterklasse erstellt werden soll. Selbst wenn sie von einer anderen Person als der Person implementiert wird, die die Superklasse erstellt hat, kann sie ohne viel Zögern implementiert werden. Ich fragte mich. Später fiel mir diesmal kein Beispiel ein, also werde ich versuchen, mehr zu wissen.

~~ Das in der Erklärung verwendete Beispiel wird zu einem späteren Zeitpunkt in Python implementiert. ~~ In Python implementiert.

Schließlich

Wenn etwas nicht stimmt, wäre ich Ihnen dankbar, wenn Sie darauf hinweisen könnten!

appendix

Nächster Artikel

https://qiita.com/sirajirasajiki/items/3a779d3529fbc14af801

Seite über PlantUML

Die folgenden Sites wurden bei der Installation von PlantUML berücksichtigt. https://qiita.com/kohashi/items/1d2c6e859eeac72ed926 Die folgenden Seiten wurden beim Schreiben von PlantUML berücksichtigt. https://qiita.com/ogomr/items/0b5c4de7f38fd1482a48

Worauf ich mich bei der Implementierung in Python bezogen habe

So vermeiden Sie Zeilenumbrüche in der Standardausgabe in Python https://qiita.com/tortuepin/items/4fbf29e42f05cb4b02a5

Änderungsprotokoll

2020/3/8 Beispiele, Klassendiagramme und Implementierung in Python hinzugefügt

Recommended Posts

Zusammenfassung von Kapitel 2 der Einführung in Entwurfsmuster, die in Java gelernt wurden
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
Zusammenfassung von Anfang bis Kapitel 1 der Einführung in Entwurfsmuster, die in der Java-Sprache gelernt wurden
Zusammenfassung der Prototypmuster der Einführung in Entwurfsmuster, die in Java gelernt wurden
Singleton-Musterzusammenfassung der Einführung in Entwurfsmuster, die in Java gelernt wurden
[Von Zeit zu Zeit aktualisiert] Zusammenfassung der Entwurfsmuster in Java
Mit Java & PHP erlernte Entwurfsmuster (Zusammenfassung)
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 6] Einführung in Scicit-Learn mit 100 Klopfen Sprachverarbeitung
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Entwurfsmuster in Python: Einführung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Einführung in die in C Language Part 1 Server Edition erlernte Socket-API
Einführung in die Überprüfung der Wirksamkeit Kapitel 1 in Python geschrieben
100 Sprachverarbeitung Knock UNIX-Befehle in Kapitel 2
Zusammenfassung zum Importieren von Dateien in Python 3
100 Sprachverarbeitung Klopfen Sie auf reguläre Ausdrücke, die Sie in Kapitel 3 gelernt haben
Zusammenfassung der Verwendung von MNIST mit Python
100 Sprachverarbeitung klopft Morphologische Analyse in Kapitel 4 gelernt
Einführung in die Überprüfung der Wirksamkeit Kapitel 2 in Python geschrieben
Verstehen Sie Entwurfsmuster, indem Sie Implementierungen in JavaScript und Java vergleichen. [Von Zeit zu Zeit aktualisiert]
Zusammenfassung der Tools, die zum Analysieren von Daten in Python benötigt werden
Einführung in die Python-Sprache
[Einführung in Python] Zusammenfassung der Funktionen und Methoden, die häufig in Python vorkommen [Problemformat]
Entwerfen Sie Muster für häufig verwendete Java-Bibliotheken - Builder-Muster
Entwerfen Sie Muster für häufig verwendete Java-Bibliotheken - Adaptermuster
Entwerfen Sie Muster für häufig verwendete Java-Bibliotheken - Strategiemuster
Einführung in die Statistik Die University of Tokyo Press Kapitel 2 Übungen
Zusammenfassung zum Schreiben von in gRPC verwendeten .proto-Dateien
Einführung in die Socket-API in C Language 2nd Client Edition
Versuchen wir das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" - Kapitel 3 Schritt 10 Memo "Details und Verbesserung des neuronalen Netzes"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 06 Memo "Identifier"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 02 Memo "Vorverarbeitung"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 07 Memo "Evaluation"
So implementieren Sie Java-Code im Hintergrund von Red Hat (Linux ONE)
[Python] PCA-Scratch im Beispiel "Einführung in die multivariate Analysemethode"
Entwerfen Sie Muster für häufig verwendete Java-Bibliotheken - Muster der Vorlagenmethode
Ich habe versucht, in 3 Jahren 5 Muster der Analysebasis zu erstellen
Entwerfen Sie Muster für häufig verwendete Java-Bibliotheken - Fassadenmuster
Einführung in die in C-Sprache gelernte Socket-API 4. UDP Server / Client Edition Nr. 1
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 4 Schritt 14 Memo "Hyperparametersuche"
Zusammenfassung des Schreibens von if-Anweisungen (Scala, Java, Rust, C-Sprache, C ++, Go-Sprache, PHP, Perl, Python, Ruby)
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 04 Memo "Feature Extraction"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 4 Schritt 15 Memo "Datenerfassung"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 3 Schritt 08 Memo "Einführung in neuronale Netze".
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 05 Memo "Feature Quantity Conversion"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 3 Schritt 11 Memo "Worteinbettungen"
Leicht verständliche Erklärung der Python-Webanwendung (Django) auch für Anfänger (4) [Einführung in Routing-Einstellungen und MTV-Entwurfsmuster]
Zusammenfassung der Verwendung von pandas.DataFrame.loc
100 Sprachverarbeitung Knock Kapitel 1 in Python
[Einführung in Python3 Tag 13] Kapitel 7 Zeichenfolgen (7.1-7.1.1.1)
Zusammenfassung der Verwendung von pyenv-virtualenv
[Einführung in Python3 Tag 14] Kapitel 7 Zeichenfolgen (7.1.1.1 bis 7.1.1.4)
Einführung in Protobuf-c (C-Sprache ⇔ Python)
Einführung einer datengesteuerten Controller-Entwurfsmethode
Zusammenfassung verschiedener Operationen in Tensorflow
Muster der Verantwortungskette in Java
[Einführung in Python3 Tag 15] Kapitel 7 Zeichenfolgen (7.1.2-7.1.2.2)