Entwurfsmuster (Entwurfsmuster) ist eine Reihe klassifizierter und katalogisierter Zusammenfassungen von Code-Entwurfserfahrungen, die wiederholt verwendet werden und den meisten Menschen bekannt sind. Der Zweck der Verwendung von Entwurfsmustern besteht darin, Code wiederzuverwenden, ihn für andere verst?ndlicher zu machen und die Zuverl?ssigkeit des Codes sicherzustellen. Es besteht kein Zweifel, dass Entwurfsmuster eine Win-Win-Situation für uns selbst und andere darstellen, und dass Entwurfsmuster das Schreiben von Code zu einem echten Engineering machen;
Entwurfsmuster (engl. Design Patterns) sind L?sungen für wiederkehrende Probleme im objektorientierten Design. Dieser Begriff wurde in den 1990er Jahren von Erich Gamma und anderen aus dem Bereich des Architekturdesigns in die Informatik eingeführt. Die Bedeutung dieses Begriffs ist umstritten. Algorithmen sind keine Entwurfsmuster, da sich Algorithmen eher mit der Probleml?sung als mit Entwurfsproblemen befassen. Entwurfsmuster beschreiben normalerweise eine Reihe von Klassen und Objekten, die eng miteinander interagieren. Entwurfsmuster bieten eine gemeinsame Sprache für die Diskussion von Softwaredesign, sodass Anf?nger und andere Designer die Designerfahrung erfahrener Designer erfassen k?nnen. Entwurfsmuster liefern auch Ziele für das Software-Refactoring.
Mit dem wachsenden Interesse an Designmustern in der Softwareentwicklungsgemeinschaft wurden einige verwandte Monographien ver?ffentlicht, entsprechende Seminare wurden regelm??ig abgehalten und Ward Cunningham erfand WikiWiki, um Designmustererfahrungen zu kommunizieren.
Tipps: Dieses Tutorial erkl?rt Ihnen Schritt für Schritt das Konzept von Entwurfsmustern anhand von Java-Beispielen. Sie müssen also etwas über Java-Kenntnisse wissen.
Ausdrucksformat
Das Format zum Ausdruck eines Software-Entwurfsmusters variiert je nach Autor, z. B. Abteilung und Name. Das Format h?ufig verwendeter GoF-Beschreibungsmuster ist grob in die folgenden Teile unterteilt:
Mustername: Jedes Muster hat seinen eigenen Namen, und der Mustername erm?glicht es uns, unser Design zu diskutieren.
Problem: Es gibt bestimmte Anl?sse, die beim objektorientierten Systemdesign immer wieder auftreten und dazu führen, dass wir ein bestimmtes Muster übernehmen.
L?sung: Die L?sung des oben genannten Problems gibt die verschiedenen Komponenten des Designs, ihre Beziehungen, die Aufteilung der Verantwortlichkeiten und die Methoden der Zusammenarbeit an.
Alias: Ein Muster kann mehr als einen Namen haben. Diese Namen sollten in diesem Abschnitt vermerkt werden.
Motivation: In welchem ??Fall dieses Muster verwendet wird, liegt in der Verantwortung der in diesem Abschnitt bereitgestellten L?sung (einschlie?lich des Problems und Kontexts).
Anwendbarkeit: Auf welche Situationen ist das Muster anwendbar, der Hintergrund des Musters usw.
Struktur: Dieser Teil h?ufig verwendeter Klassendiagramme und Interaktionsdiagramme veranschaulicht dieses Muster.
Teilnehmer: Dieser Abschnitt enth?lt eine Liste der in diesem Muster verwendeten Klassen und Objekte und die Rollen, die sie im Design spielen.
Kooperation: Beschreibt die Interaktion zwischen Klassen und Objekten in diesem Modus.
Auswirkungen: Die Auswirkungen der übernahme dieses Modells auf andere Teile des Softwaresystems, beispielsweise die Auswirkungen auf die Skalierbarkeit und Portabilit?t des Systems. Zu den Auswirkungen z?hlen auch negative Auswirkungen. In diesem Abschnitt sollten die Ergebnisse, Nebenwirkungen und Kompromisse (Kompromisse) der Verwendung dieses Musters beschrieben werden. M?gliche Techniken für das Muster oder vorgeschlagene M?glichkeiten zur Implementierung des Musters.
Beispiel: Beschreiben Sie kurz, wie Muster in einer Programmiersprache verwendet werden.
Bekannte Anwendungen: In der Branche bekannte Implementierungsbeispiele.
Verwandte Muster: Dieser Abschnitt enth?lt andere verwandte Muster sowie Unterschiede zu anderen ?hnlichen Mustern.
Tipp: Unser Tutorial zu Designmustern hilft Ihnen dabei, alles über Designmuster zu lernen. Wenn Sie Fragen haben, gehen Sie bitte zur PHP Chinese Community, um Ihre Fragen zu stellen, und begeisterte Internetnutzer werden sie für Sie beantworten.
Musterprinzipien
Jeder f?ngt an, auf Designmuster zu achten. Warum verwenden wir also Designmuster? Warum sollten wir mit so vielen Designmustern entwerfen?
Um ehrlich zu sein, habe ich es vorher nicht wirklich verstanden. Wenn ich nur zusehe, wie alle ?Entwurfsmuster“ wiederholen, fühle ich mich ein wenig schwach. Also kaufte ich mir ein Buch über die Designmuster der ?Gang of Four“ und es stellte sich heraus, dass ich es überhaupt nicht verstand: Ich schien es zu verstehen, als ich es las, verga? es dann aber nach einer Weile . Vielleicht liegt es daran, dass ich relativ ?dumm“ bin :)) Vor kurzem habe ich einige Erkenntnisse gewonnen. ?Es ist besser, alleine glücklich zu sein, als zusammen glücklich zu sein“, das m?chte ich gerne mit Ihnen teilen und hoffe, Sie k?nnen mir einen Rat geben
Warum sollten wir uns für ?Design Pattern“ einsetzen? Der Hauptgrund besteht darin, Code wiederzuverwenden und die Wartbarkeit zu erh?hen.
Wie k?nnen wir also die Wiederverwendung von Code erreichen? Die OO-Welt hat mehrere Prinzipien ihrer Vorg?nger: das ?Open Closed Principal“-Prinzip, das Liskov-Substitutionsprinzip und das Synthese- und Wiederverwendungsprinzip. Entwurfsmuster implementieren diese Prinzipien, um die Wiederverwendung von Code zu erreichen und die Wartbarkeit zu erh?hen.
Offen-Geschlossen-Prinzip
Dieses Prinzip wurde von ?Bertrand Meyer“ vorgeschlagen. Der Originaltext lautet: ?Software-Entit?ten sollten für Erweiterungen offen, für ?nderungen jedoch geschlossen sein.“ Das hei?t, das Modul sollte für Erweiterungen ge?ffnet und für ?nderungen geschlossen sein. Module sollten versucht werden, erweitert zu werden, ohne den Originalcode (?Original“, bezogen auf den Originalcode) zu ?ndern. Wie also erweitern? Schauen wir uns das ?Fabrikmuster“ an: Angenommen, es gibt einen Mann in Zhongguancun, der Raubkopien von CDs und pornografischen Filmen verkauft, und wir entwickeln für ihn eine ?CD-Verkaufsverwaltungssoftware“. Wir sollten zun?chst eine ?CD“-Schnittstelle entwerfen. Wie im Bild gezeigt: [pre]______________|<>||. CD ||_____________|| Sell() || ||_____________|[/pre] Und Raubkopien und pornografische Filme sind seine Unterkategorien. Der Junge verwaltet diese Discs über ?DiscFactory“. Der Code lautet:
publicclassDiscFactory{ publicstatic光盤 getDisc(Stringname){ return(光盤)Class.forName(name).getInstance(); } }
Jemand m?chte eine Raubkopie einer Festplatte kaufen, wie geht das?
public class boy{ public static void main(String【】 args){ CD d=DiscFactory.getDisc("Pirate Disc"} }
Wenn vorhanden Eines Tages hat das Gewissen dieses Kerls es herausgefunden und er begann, echte Software zu verkaufen. Es spielt keine Rolle, wir müssen nur eine weitere Unterkategorie von ?CD“ mit dem Namen ?Originalsoftware“ erstellen. Die ursprüngliche Struktur und der ursprüngliche Code müssen nicht ge?ndert werden. Wie w?re es damit? Offen für Erweiterungen, geschlossen für ?nderungen. ?Offen-Geschlossenes Prinzip“ Das Fabrikmuster erweitert bestimmte Produkte. Wenn Sie diese ?Fabrik“ erweitern m?chten, wird es zum ?abstrakten Fabrikmuster“.
Richter-Substitutionsprinzip
Das Liskov-Substitutionsprinzip wurde von ?Barbara Liskov“ vorgeschlagen. Wenn die übergeordnete Klasse aufgerufen wird, kann sie ausgeführt werden, wenn sie in eine Unterklasse ge?ndert wird. Zum Beispiel: CD d=neue Raubkopien(); d. Wenn Sie die Kategorie ?Raubkopien“ in die Kategorie ?Pornofilme“ ?ndern m?chten, ist dies problemlos m?glich. Der Java-Compiler prüft, ob das Programm dem Liskov-Substitutionsprinzip entspricht. Erinnern Sie sich noch an ein Prinzip der Java-Vererbung? Die Zugriffsrechte der Override-Methode der Unterklasse dürfen nicht geringer sein als die Zugriffsrechte der entsprechenden Methode der übergeordneten Klasse. Wenn beispielsweise die Zugriffsberechtigung der Methode ?Verkaufen“ in ?CD“ ??ffentlich“ ist, kann die Methode ?Verkaufen“ in ?Pirate Disc“ und ?Raw Film“ nicht geschützt oder privat sein und die Zusammenstellung wird nicht bestanden. Warum ist das so? Denken Sie darüber nach: Wenn die Methode des ?Verkaufs“ von ?Raubkopien“ privat ist. Dann kann der folgende Code nicht ausgeführt werden: CD d=new raubkopiert disk(); d. Man kann sagen, dass das Liskov-Ersetzungsprinzip eine Grundlage für Vererbung und Wiederverwendung ist.
Das Prinzip der Komposition und Wiederverwendung
bedeutet, weniger Vererbung und mehr Kompositionsbeziehungen zu verwenden. Ich habe einmal ein Programm wie dieses geschrieben: Es gibt mehrere Klassen, die sich mit der Datenbank befassen müssen, also schreibe ich eine Klasse für Datenbankoperationen, und dann erben andere Klassen, die sich mit der Datenbank befassen, diese. Infolgedessen habe ich sp?ter eine Methode der Datenbankoperationsklasse ge?ndert, und alle Klassen mussten ge?ndert werden. ?Eine Bewegung wirkt sich auf den ganzen K?rper aus“! Zielorientiert ist es, Schwankungen auf den kleinstm?glichen Bereich zu begrenzen.
In Java sollten Sie versuchen, für die Schnittstelle zu programmieren, anstatt Klassen zu implementieren. Auf diese Weise hat die ?nderung einer Unterklasse keine Auswirkungen auf den Code, der ihre Methoden aufruft. Lassen Sie jede Kategorie so wenig Kontakt wie m?glich mit anderen haben: ?Sprich nicht mit Fremden.“ Auf diese Weise wird den Fischen im Teich kein Schaden zugefügt, wenn das Stadttor Feuer f?ngt. Nur wenn Skalierbarkeit und Wartbarkeit verbessert werden k?nnen
Sobald Sie diese Prinzipien verstanden haben und sich dann die Entwurfsmuster ansehen, geht es nur noch darum, wie Sie diese Prinzipien auf bestimmte Probleme umsetzen k?nnen. Zhang Wuji lernte Tai Chi, verga? alle Bewegungen und besiegte die ?Zwei ?ltesten Xuan Mi“. Es wurde gesagt, dass er ?keine Bewegungen im Kopf hatte“. Entwurfsmuster k?nnen als Tricks beschrieben werden. Wenn Sie zuerst alle Muster lernen, dann alle Muster vergessen und tun, was Sie wollen, kann dies als der h?chste Zustand von OO bezeichnet werden. Haha, lustig, lustig! (JR)
Abh?ngigkeitsinversionsprinzip Die Abstraktion sollte nicht von Details abh?ngen, Details sollten auf
Abh?ngigkeitsinversionsprinzip
- Schnittstellenisolationsprinzip
- Abstrakte Klasse
Die Klasse
wird von Unterklassen geerbt und enth?lt im Allgemeinen die gemeinsamen Attribute und Methoden dieses Systems. Hinweis: In einer guten Vererbungsbeziehung sollten nur Blattknoten konkrete Klassen sein und andere Knoten sollten abstrakte Klassen sein, was bedeutet, dass konkrete Klassen nicht vererbt werden. Fügen Sie so viel allgemeinen Code wie m?glich in abstrakte Klassen ein. 7 Demeters Gesetz des minimalen Wissensprinzips. Sprechen Sie nicht mit Fremden.
Inhalte, die in diesem Designmuster-Tutorial-Handbuch behandelt werden
Dieses Designmuster-Tutorial behandelt die Einführung aller Designmuster, einschlie?lich Factory-Muster, abstraktes Factory-Muster, Singleton-Muster (Singleton-Muster), Builder-Muster ( Builder-Muster), Prototyp-Muster (Prototyp-Muster) usw.
Tipp: Jedes Kapitel dieses Tutorials enth?lt viele Java-Beispiele, die Ihnen helfen, Entwurfsmuster besser zu erlernen und zu verstehen.
Neuestes Kapitel
- 傳輸對(duì)象模式 2016-10-18
- 服務(wù)定位器模式 2016-10-18
- 攔截過濾器模式 2016-10-18
- 前端控制器模式 2016-10-18
- 數(shù)據(jù)訪問對(duì)象模式 2016-10-18
- 組合實(shí)體模式 2016-10-18
- 業(yè)務(wù)代表模式 2016-10-18
- MVC 模式 2016-10-18
?hnliche Kurse
- Wissenssammlung über Computernetzwerke 2022-09-30
- Video-Tutorial zum Boolean Education HTTP-Protokoll 2022-04-14
- Video-Tutorial zu regul?ren Ausdrücken im Booleschen Bildungsbereich 2022-04-18
- Video-Tutorial zu booleschen p?dagogischen Designmustern 2022-04-21
- überblick über Computernetzwerke – Grundkenntnisse, die Programmierer beherrschen müssen 2021-11-22
- Ein unverzichtbares Tutorial für Programmierer – detaillierte Erkl?rung des HTTP-Protokolls 2021-11-19
- Eine einstündige umfassende Einführung in das HTTP-Protokoll – unerl?sslich für die Webentwicklung 2021-11-26
- Beherrschen Sie die Grundlagen des Webs in 90 Minuten (Netzwerkprotokoll | HTTP | Webserver) 2021-12-10