Ich versuche, meine Kollegen auf dem Gebiet der Entwurfsmuster auszubilden. Einige der ursprünglichen Gang of Four-Muster sind ein wenig esoterisch, daher frage ich mich, ob es eine Untergruppe von "wesentlichen" Mustern gibt, die alle Programmierer kennen sollten. Während ich die Liste durchschaue, denke ich, dass ich wahrscheinlich verwendet habe -
- Abstrakte Fabrik
- Fabrik Methode
- Singleton
- Brücke
- Fassade
- Befehl
Welche verwenden Sie in der Praxis und wofür verwenden Sie sie?
design-patterns
Craig Schwarze
quelle
quelle
for, if, while...
etc" zu sammeln - schwer zu messen, wie sinnlos das wäre.Antworten:
Hier ist eine Liste derjenigen, die ich in der Praxis verwendet oder gesehen habe:
Singleton - Anwendungsobjekt in ASP.Net ist ein hervorragendes Beispiel dafür.
Adapter - Das Herstellen einer Verbindung zu Datenbanken kann normalerweise eine Adapter-Klasse beinhalten, zumindest in meinem Bereich der .Net-Inhalte.
Factory - General zum Generieren von Objekten, obwohl ich dies früher in einigen älteren klassischen ASPs gesehen habe.
Strategie - Ich hatte eine Anwendung, die für jeden Gerätetyp eine ähnliche Struktur für die Klasse hatte, die ich als Implementierung dieses Musters betrachten würde.
Fassade - In gewisser Hinsicht ähnelt dies dem Adapter-Muster, da es in der Regel mehrere Systeme miteinander verbindet.
quelle
Die Autoren haben die Muster aus beobachteten Designs zusammengestellt, die sie in realen Anwendungen gefunden haben. Niemand wird wahrscheinlich alle von ihnen benutzen, aber sie werden alle benutzt.
quelle
Dekorateur .
BEARBEITEN : In fast jedem Projekt, das über die 'triviale' Phase hinausgeht, wird eine IAction-Schnittstelle angezeigt (Details können abweichen):
Die nächste Stunde verbringe ich damit, viele kleine, fast triviale Klassen zu schreiben, die IAction implementieren. In Kombination sind sie sehr leistungsstark und flexibel.
ZB ein
LogAction
(schreiben, um die IAction zu protokollieren und auszuführen),NullAction
(nichts tun und true zurückgeben),ActionList
(eine Liste von IActions ausführen und die UND-Verknüpfung der Bools zurückgeben). In einigen Fällen einAndAction
(kurzgeschlossen oder nicht wieder das UND-ing von zwei Aktionen, könnte)OrAction
,NotAction
sinnvoll auch.Obwohl technisch gesehen aus den obigen Beispielen nur die LogAction ein Decorator ist (die anderen arbeiten nicht mit genau 1 IAction), halte ich dies dennoch für eine Verallgemeinerung des Decorator-Musters, wenn ich eine ActionList von LogActions von IActions erstelle.
quelle
Ich gehe davon aus, dass Sie die Frage auf die Verwendung von Mustern in eigenem Code / Projekten beschränken möchten (keine Klassenbibliotheken und Frameworks von Drittanbietern).
Wie andere habe ich auch die Factory- Muster am häufigsten verwendet. Dann
quelle
Ich habe viele der anderen verwendet, die bereits erwähnt wurden (Singleton, Factory, Builder, Command, Strategy, etc ...)
Eine, die ich noch nicht erwähnt habe, ist das Fliegengewicht, das ich häufig benutze. Ich habe unten ein Beispiel für eine Implementierung angegeben:
quelle
Die meisten der ursprünglichen Gang of Four-Muster werden heute noch verwendet, aber es gibt andere, die jetzt populär sind und nicht in dem Buch stehen.
Finden Sie eine Referenz für Design Patters in der Sprache, die Sie verwenden. Sie sind in der Regel konkreter und verwenden bestimmte Sprachmerkmale, um die Muster prägnanter und eleganter zu implementieren.
Drei großartige Ressourcen für Design Patterns:
Buch "Head First Design Patterns" - die Sprache der Wahl ist Java, ist aber für alle Sprachen relevant. dofactory Design Patterns - großartige und kostenlose Erklärungen zu .net-Designmustern mit Code. PluralSight - Design Patterns Library - diese ist kostenpflichtig, aber zu gut, um sie nicht in die Liste aufzunehmen.
quelle
Wenn Sie allgemeine Bibliotheken wie ACE verwenden, werden Sie am Ende mehr verwenden, als Sie zu verwenden glauben. Ich benutze Observer / Observable ausgiebig :-)
quelle
Ich habe mindestens einmal einen Builder verwendet (der gleiche Konvertierungsprozess kann HTML- oder Excel-Ausgaben erstellen).
Ich verwende häufig die Template-Methode (für JDBC-bezogene Aufgaben oder abstrakte Swing-Controller).
Einmal musste ich viele neue Funktionen in eine formularbasierte Anwendung umwandeln, was ein Durcheinander war. Ich konnte mich erst weiterentwickeln, nachdem ich das vorhandene Material zu einer State-Pattern-basierten Lösung umgestaltet hatte. (Nun, das meiste davon).
Ich benutze auch häufig Befehle (Swing Actions) und auch Beobachter.
Ich habe einmal eine Mememento-ähnliche Lösung zum Erkennen von Änderungen in Swing-Formen verwendet. Das Formular würde seinen Status serialisieren, was ich mit früheren Status verglichen habe (entspricht ()).
quelle
Ich glaube, ich habe die meisten in meiner Karriere. Das einzige, von dem ich sicher bin, dass ich es nicht verwendet habe, ist das Adaptermuster, das mit Mehrfachvererbung in dem Buch implementiert ist, da ich kein großer Fan von Mehrfachvererbung bin.
quelle
Ich bin gern Dekorateur. Der einzige, den ich zu den genannten hinzufüge, ist Proxy.
quelle