Welches Designmuster ist Ihrer Meinung nach am beliebtesten?
Welches Designmuster ist Ihrer Meinung nach am beliebtesten?
Antworten:
Ich bin mir ziemlich sicher, dass "The Big Ball of Mud" am häufigsten vorkommt. Leider für uns alle.
http://en.wikipedia.org/wiki/Big_ball_of_mud
MVC und seine Variationen gehören definitiv zu den Top-Designmustern.
Wenn Sie über Gang-of-Four- Designmuster sprechen, würde ich Singleton sagen . Dies ist ein wirklich trauriger Zustand - fast so, als würden Programmierer von der Magie der Designmuster erfahren und einfach nach dem ersten innehalten.
Wenn Sie über Architekturmuster sprechen (mit anderen Worten, Entwurfsmuster, die mehrere Klassen oder Ebenen umfassen), würde ich MVC sagen . Einige andere beliebte sind das Repository- Muster und der Service-Locator .
Beobachter
Wenn Sie jemals ein Ereignis verwendet haben. Sie haben Observer verwendet.
Dekorateur
Hinzufügen von Funktionen zu einem Objekt zur Laufzeit durch Komposition. Mein persönlicher Favorit.
Edit: Auch Factory ist wohl eine der gebräuchlichsten.
Fassade
Denken Sie an eine REST-Schnittstelle wie Twitter oder die SO-APIs. Es verbirgt eine Menge Back-End-Sachen, die zumindest im Zweifelsfall fürchterlich komplex sein können.
Interessiert es mich, in welchen db tables @ apklusk-Tweets sie gespeichert sind? Und dass es einen schnellen Cache hat? Und dass @shemnon so wenig Leser hat, dass die Tweets immer keinen Speicher mehr haben? Das ist die Magie der Fassade.
Strategie-Muster
Wenn Sie jemals Abhängigkeitsinjektion verwendet haben, haben Sie das Strategiemuster verwendet.
Warum hat noch niemand den Iterator erwähnt ? Besonders bei all den Karten, die komplexe Datenstrukturen bilden ... es ist die, die ich am häufigsten benutze. Oder sprechen wir über Muster, die wir neu implementieren?
Ich bin überrascht, dass niemand das Factory-Muster erwähnt hat, nach meiner Erfahrung eines der am häufigsten verwendeten (und auch am häufigsten missbrauchten) Muster da draußen. Wenn nicht zuerst, wahrscheinlich sollte der Singleton zuerst sein, hätte ich gedacht, dass dies eine knappe Sekunde sein würde.
Zusammen mit meiner vorherigen Antwort werde ich eine neue hinzufügen, die ich heute von meinem Biest eines geerbten Projekts getroffen habe:
Kopieren Einfügen
Während des Debuggens stieß ich auf einen Code, der zwei Funktionen mit ähnlichem Namen aufrief:
if(x)
Func1
else
Func2
Func1 und Func2 hatten die gleichen Parameter. Ich habe sie herausgezogen und unterschieden, und sie sind zu 100% gleich, außer dass Func1 Func3 und Func2 Func4 aufruft. Ich zog die heraus und differenzierte sie. 100% gleich, bis auf 1 Zeile. Ein früherer Programmierer entschied sich daher, zwei in 50 Zeilen verschachtelte Funktionen zu kopieren und an genau einer Stelle zwei private Funktionen einzufügen, anstatt einen Flag-Parameter hinzuzufügen. Es bringt mich dazu zu weinen.
Ich kann mir kein Programm vorstellen, das das Observer-Muster nicht verwendet. Wie Jaco erwähnte, wird Singleton auch sehr oft verwendet, leider ist es zu einem Hammer geworden (jeder Programmierer verwendet es, auch wenn es nicht vollständig benötigt wird).
$_SESSION
Variablen gespeichert ist.
Dolmetscher
Selten implementiert, oft benutzt. XPATH-, XSLT-, Regex-, jQuery-Selektoren usw.
Ich bin überrascht, dass noch niemand "Builder" gesagt hat. Oder "Adapter". Sie sind wahrscheinlich nicht so exotisch wie einige der anderen genannten, aber ich benutze sie die ganze Zeit. Factory und Abstract Factory sind ebenfalls weit verbreitet (aber sie sind bereits vergeben).
Ich glaube nicht, dass es in der GoF aufgeführt ist, aber ich verwende ständig Variationen davon.
Auf der Ebene des Softwaredesigns würde ich argumentieren, dass Composite, Strategie und Vorlage (und in geringerem Maße Factory) am häufigsten verwendet werden. Seit etwa einem Jahrzehnt bevorzugen wir die Komposition gegenüber der Vererbung, wenn wir unsere Systeme mit einem OO-Design erstellen. Infolgedessen spielt die Kombination der eben erwähnten Muster eine viel wichtigere Rolle als alle anderen IMO.
Architektonisch würde ich für MVC im Unternehmen und für Muster auf der Grundlage von Zustandsautomaten auf der eingebetteten Seite der Dinge argumentieren.