Wann müssen wir die Dekorator-Muster?
Wenn ist es nötig, verwenden Sie die Dekorator-Muster? Wenn möglich, geben Sie mir ein real-world Beispiel, ist gut geeignet für das Muster.
- Sie müssen uns nur sagen, was Sie tun müssen, wenn Sie wissen möchten, ob ein Dekorator-Muster wäre nützlich, wenn Sie wollen einfach nur ein Allgemeines Beispiel nur nachschlagen Decorator Pattern auf wikipedia.
- Ich habe gelesen, die Wikipedia Artikel, und bin immer noch auf der Suche nach besseren Beispielen.
- Mögliche Duplikate von Bei der Verwendung des Decorator-Muster?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Streams in Java Unterklassen von
InputStream
undOutputStream
sind perfekte Beispiele für das Dekorator-Muster.Als Beispiel, das schreiben einer Datei auf der Festplatte:
Dann sollte Sie erfordern einige zusätzliche Funktionalität in Bezug auf das schreiben auf den Datenträger:
Einfach durch "Verkettung" der Konstruktoren anzulegen, können Sie sehr mächtig Arten des Schreibens auf der Festplatte. Das schöne an diesem Weg ist, dass Sie können hinzufügen, andere (in diesem Beispiel)
OutputStream
Implementierungen später auf. Auch, jede Anwendung, die nicht wissen, wie die anderen arbeiten - Sie alle nur arbeiten, um den gleichen Vertrag. Dies macht auch die Prüfung der jeweiligen Implementierung sehr einfach in der isolation.Es gibt viele "real world" - Beispiele, wo das decorator-Muster verwendet werden können. Aus der Spitze von meinem Kopf, einige Beispiele:
Head First Design Patterns hat etwas mehr "real world" - Beispiele. Es scheint, dass O ' Reilly hat Ihre Probe Kapitel, die auf Dekorator-Muster, kostenlos; Google zeigte sich in diesem link: PDF
Zwei real-life Beispiele:
Den item-Upgrade-systems in Diablo 2 und Final Fantasy 7. Waffen und Rüstungen haben sockel oder slots. Während des Spiels werden die Spieler-upgrades (Edelsteine, Runen oder materia) in diese slots. Jedes upgrade hat eine individuelle Wirkung (sagen wir, 8 Punkte Feuerschaden oder 10% mana leech). Wenn Sie also Schwinge dein Schwert, es hat seine Basis-Schaden plus dem Schaden Hinzugefügt, indem jedes upgrade, das Sie Hinzugefügt haben. Dies entspricht dem Dekorator-Muster extrem eng.
Von Gang of Four:
...
Haben Sie einen Blick auf die Fowler Beschreibung; es gibt ein konkretes Beispiel in Bezug auf Bücher/videos und Dekorateur "borrowable", können Sie finden es hier.
Eines der coolsten und am meisten Literale verwendet, die ich gesehen habe war die Umsetzung undo-Fähigkeit, zurück in den schlechten alten Tagen von single-level-rückgängig machen. Gegeben ein Vektor-Zeichenprogramm, mit mehreren ausgewählten Objekte unterschiedlicher Farben: implementieren Sie einen Befehl zu ändern Ihre Farben. Und machen Sie es rückgängig machen können. Dieses wurde getan, indem ein Decorator, der aufgerufen wird, in die getColor () - stream, so dass, wenn Sie wurden gezogen, Sie haben gezogen, in der neuen Farbe; im wesentlichen die Objekte der eigenen getColor () - Methoden wurden überstimmt. So zeigten Sie in der neuen Farbe. Rückgängig zu machen, war so einfach wie das entfernen der Dekorateur aus aller Objekte; Begehung der Handlung, war eine Sache, die Anwendung der Farbe aus der Decorator auf die Objekte und dann es zu entfernen. Viel einfacher als eine Tabelle, welche Objekte hatte gefärbt ist und was Ihre ursprünglichen Farben hatte.
Die Absicht des Dekorator-pattern:
Den schwersten Einsatz von decorator-Muster sind GUIs und java.io-Klassen. Es ist ein kostenloses Kapitel aus Head First: Design Patterns über Dekorator-Muster [link], die einige andere Beispiele:
Können Sie auch Lesen Dekorator-Muster von Beispiel [PDF], in dem decorator-Muster verwendet wird, in einer evaluation Anwendung.
Sie aufgefordert, einen real-world "- Beispiel, also hier gehen Sie: download (oder "durchsuchen") DonsProxy von github:
git://github.com/DonBranson/DonsProxy.git
DonsProxy im Grunde verwendet ein WireTap Muster zu lassen, die Sie beobachten oder extrahieren von HTTP-Verkehr, plus es können Sie die Verbindung ändern Verhalten zu simulieren suboptimale verbindungen. Ich benutze das Dekorator-Muster zu ändern, Kanäle, basierend auf Benutzer-Optionen. Befehlszeilen-oder GUI-Optionen (dependinvg auf, welche Ansicht Sie verwenden) erlaubt Latenz-Injektion und die Bandbreite der Injektion, unter anderem. Wenn Sie Spritzen Wartezeit, fügt hinzu, dass die LatencyDecorator den Kanal, wenn Sie die Bandbreite reduzieren, fügt hinzu, dass die ThrottleDecorator auf den Kanal. Da dieser Einsatz ein Dekorator-Muster, Sie können mix-and-match-Verhalten nach Herzenslust.
Wenn Sie sind vertraut mit Swing-Entwicklung in Java (zusammen mit anderen GUI-toolkits), sehen Sie das decorator-Muster verwendet, eine Menge. Haben Sie vielleicht einen Konstruktor in einer bestimmten Komponente und dann fügt Funktionalität, um es.
Hier ist ein guter Artikel, verwendet Swing als Beispiel.
Verwenden Decorator_pattern wenn
Ich habe mit meinen eigenen Automaten Dekorateur.
Anweisung Problem: Berechnen Sie den Preis für Getränke (Tee oder Kaffee), indem Sie eine oder mehrere Geschmacksrichtungen wie Zucker, Zitrone usw.
Code-Beispiel und Erklärung @
Bei der Verwendung des Decorator-Muster?