Diese Artikelserie wurde vom Autor verfasst (Java-Lernerfahrung: ca. 2 Jahre, Java-Berufserfahrung: ein wenig) Erstellt, um "GoF Design Pattern 23" zu verstehen. Ich beabsichtige, mich eher auf das Bild als auf die Genauigkeit zu konzentrieren, und ich denke, dass der Inhalt auf ** weniger als auf Java-Zwischenprogrammierung ** abzielen wird.
Wenn Sie es nicht erreichen können, kommentieren Sie bitte <(_ _)>
** Hauptlernquellen: ** ・ "Einführung in Entwurfsmuster, die in der erweiterten und überarbeiteten Java-Sprache (von Hiroshi Yuki) gelernt wurden" ・ Entwurfsmuster | TECHSCORE
Entwerfen Sie Muster, um die Qualität des Programms zu verbessern. In einer solchen Situation ist es eine Sammlung der Weisheit unserer Vorgänger, wie zum Beispiel so zu entwerfen und später zu helfen.
Dieser Artikel behandelt 23 Muster, die als ** "GoF Design Patterns" ** bekannt sind. "[GoF](https://ja.wikipedia.org/wiki/%E3%82%AE%E3%83%A3%E3%83%B3%E3%82%B0%E3%83%BB%E3%" 82% AA% E3% 83% 96% E3% 83% BB% E3% 83% 95% E3% 82% A9% E3% 83% BC_ (% E6% 83% 85% E5% A0% B1% E5% B7 Es wurde von einer prominenten Gruppe von Software-Ingenieuren namens "% A5% E5% AD% A6))" befürwortet und ist eines der bekanntesten Entwurfsmuster. Japanische Version des Buches: ** "Entwurfsmuster zur Wiederverwendung in der Objektorientierung" ** "(Es tut mir leid, dass ich nicht gelesen habe!)"
Es gibt verschiedene Zwecke. .. Wenn Sie GoF-Entwurfsmuster lernen, können Sie die folgenden Vorteile erwarten.
-Designmuster sind nützlich, um Programmkomponenten nach Funktionen zu gruppieren oder Rollen zu trennen, um allgemeine Teile zu erstellen.
-Java Collection (ArrayList usw.) verwendet das Iterator-Muster. Außerdem verwenden viele das Factory-Muster zur Instanziierung. -Einige Designs mit Designmustern sind auf den ersten Blick schwer zu verstehen. Wenn Sie das Muster nicht kennen, können Sie es nicht verstehen, indem Sie sich das Programm ansehen, und Sie können es als kompliziertes und schlechtes Design falsch interpretieren.
-Es gibt viele objektorientierte Programmiersprachen, die nicht auf Java beschränkt sind. Es ist jedoch ziemlich schwierig zu wissen, wie man "objektorientiert" gut verwendet. .. (Ich denke nicht, dass es ein sehr intuitives Konzept ist) Ich denke, dass das Erlernen verschiedener Muster Ihnen helfen wird, die Objektorientierung zu lernen.
・ GoF ist ein berühmtes Entwurfsmuster, und viele Ingenieure wissen es. Wenn Sie also sagen: "Dieses Design ist ein" XXX-Muster "", kann dies ausreichen, um dies zu erklären.
Für diejenigen, die von nun an Designmuster lernen, anstatt nur die Muster zu verwenden Für jedes Muster gibt es einen "Zweck", und "GoF entwirft dies für diesen Zweck". Ich denke, wenn Sie sich dieses Punktes bewusst sind, können Sie ihn anwenden.
Es ist ein Bonus. Sie können es überspringen.
Einfache Hinzufügung und Änderung des Programms. Es umfasst auch die Lesbarkeit des Codes und die ordnungsgemäße Protokollierung für die Analyse im Falle eines Problems. In Bezug auf das Programmdesign zeigt es "Flexibilität", die auf Situationen wie Funktionserweiterungen und Spezifikationsänderungen reagieren kann.
-Wenn die Teile für jede Funktion / Rolle im Programm organisiert sind, wird die Sichtbarkeit des Programms verbessert und die Wartbarkeit verbessert.
Einfache Wiederverwendung von Programmen und ihren Teilen. Sie können einen Teil an mehreren Stellen im Programm oder mit einigen Änderungen in einem anderen Programm verwenden. Zusätzlich zur Reduzierung der Mühe, denselben Code zweimal zu schreiben Teile, die die strenge Testphase bestanden haben, sollten qualitativ garantiert sein. Wenn die qualitätsgarantierten Teile unverändert wiederverwendet werden können, kann der Testaufwand reduziert werden.
-Teile mit "allgemeinem Design", die nicht von besonderen Bedingungen abhängen, sind in hohem Maße wiederverwendbar. -Es kann gesagt werden, dass die offiziellen Sprach-APIs in hohem Maße wiederverwendbar sind.
Ein "gutes" Programm, das sehr wartbar und wiederverwendbar ist -Es ist für jede Funktion / Rolle "organisiert", was das Ändern und Hinzufügen von Funktionen erleichtert. -Es gibt viele "allgemein gefertigte" Teile, die so weit wie möglich von den besonderen Umständen im Programm getrennt sind.
Da das Programm jedoch zur Lösung eines echten konkreten Problems dient, Sie müssen irgendwo "konkrete" Verarbeitung und Werte schreiben.
** In Anbetracht der Umstände wird das GoF-Entwurfsmuster häufig wie folgt gestaltet. ** ** **
・ Durch die Unterteilung wird die für jedes Teil verantwortliche Arbeit klar. ・ Der Einflussbereich beim Austausch oder der Änderung von Teilen wird verringert.
・ Schreiben Sie hier und da keine spezifischen Beschreibungen, z. B. welche konkrete Klasse zu new (). Lassen Sie es beispielsweise von einem Experten verwalten, die Hauptfunktion. Anschließend können Sie zwischen verschiedenen konkreten Klassen wechseln, indem Sie nur main () ändern.
・ Bewahren Sie die Unabhängigkeit von Teilen, indem Sie der Benutzerseite nur die erforderlichen Teile anzeigen -Es ist auch möglich, mehrere Teile zu einem großen Teil zu kombinieren. Blenden Sie in diesem Fall alle Teile außer dem Fenster aus.
Die Teile des Programms sind eng mit anderen Teilen verwandt.
Ein häufiges Problem, wenn Sie ein Programm ändern möchten Das Ändern eines Teils "A" erfordert möglicherweise (möglicherweise) das Ändern des anderen Teils "B". Zu diesem Zeitpunkt soll "B" ** "abhängig" ** von "A" sein.
Wenn in Java der Name der Klasse "A" in der Beschreibung der Klasse "B" erscheint, "B" hängt von "A" ab. Wenn Sie beispielsweise den Namen "A" in "New A" ändern, müssen Sie alle in "B" angezeigten "A" in "New A" ändern. Andernfalls wird der Compiler wütend.
Es ist unwahrscheinlich, dass Sie tatsächlich nur den Namen ändern, aber solange Sie die Klasse "A" in der Klasse "B" absichtlich beschrieben haben, "B" bedeutet, dass "A" auf irgendeine Weise verwendet wird. (Es kann verschiedene Situationen geben, z. B. die Verwendung oder Vererbung einer Instanz.) Wenn Sie die Beschreibung in "A" in diesem Zustand neu schreiben, besteht die Möglichkeit, dass die Funktion von "B" mit "A" in irgendeiner Weise beeinträchtigt wird.
Im Gegenteil, unabhängig davon, wie stark Änderungen an der Klasse "B" vorgenommen werden, wirkt sich dies nicht auf die Seite der Klasse "A" aus. (Wenn "A" nicht "B" verwendet) Innerhalb des Codes für die Klasse "A" könnten Sie nicht einmal sehen, ob "B" überhaupt existiert. Daher kann gesagt werden, dass die Klasse "A" nicht von der Klasse "B" abhängt.
Wenn die Abhängigkeit zwischen Teilen kompliziert wird, geht die Unabhängigkeit von Teilen verloren und der Zeit- und Arbeitsaufwand für die Korrektur nimmt zu. Daher sollten die Abhängigkeiten so klein wie möglich und leicht zu kontrollieren sein.
Das Verhindern, dass ein bestimmter Teil einer Programmkomponente von außen gesehen oder berührt wird, wird als "Verdeckung" bezeichnet. Das "Verstecken" des rechten Teils heißt ** "Kapselung" **.
Nehmen wir zum Beispiel an, Sie haben hier einen Herd. Auf der Oberseite des Ofens befindet sich ein Ein- / Ausschalter, und wenn Sie ihn drücken, kommt eine warme Brise heraus. Das Innere der Maschine ist mit einer Abdeckung abgedeckt, und Teile wie Heizungen und Lüfter, die sich im Inneren bewegen, können nicht gesehen oder berührt werden. Dies ist der "gekapselte" Zustand, und die Teile, die für den Benutzer nicht erforderlich sind, sind "versteckt".
Was ist, wenn die Ofenabdeckung entfernt wird und die mechanischen Teile vollständig sichtbar sind? Sie können den Netzschalter nicht auf einen Blick finden, aber Sie können die Heizung, den Lüfter, die Schrauben und andere interne Teile sehen. Es ist sehr schwer zu verstehen, wo man operiert. Es ist möglich, dass Sie versehentlich ein wichtiges Teil berühren und den Ofen zerbrechen. Dies ist der Zustand, in dem es nicht "versteckt" ist.
Auf diese Weise hat eine ordnungsgemäße Verschleierung zwei Vorteile. -Es ist einfacher zu handhaben, da der Benutzer nur das Fenster (Netzschalter usw.) überprüfen muss, um die Teile zu verwenden. ・ Schützt die inneren Elemente von Teilen vor unerwarteten Veränderungen von außen
In Java wird das Ausblenden hauptsächlich durch die Verwendung von ** Zugriffskontrolle ** wie privat und öffentlich erreicht.