Ich habe das Dekorationsmuster aus dem Wiki http://en.wikipedia.org/wiki/Decorator_pattern gelesen, und Codebeispiel aus http://www.vincehuston.org/dp/decorator.html.Decorator Design Muster vs Vererbung?
Ich sehe den Punkt, dass die traditionelle Vererbung einem 'ist-a' Muster folgt, während der Dekorateur einem 'has-a' Muster folgt. Und die Aufrufkonvention des Dekorators sieht aus wie eine "Haut" über "Haut" .. über "Kern". z.B.
I* anXYZ = new Z(new Y(new X(new A)));
wie im obigen Codebeispiel Link gezeigt.
Allerdings gibt es noch ein paar Fragen, die ich nicht verstehe:
, was unter ‚Das Decorator-Muster bedeutet Wiki verwendet werden kann, um (dekorieren) zu erweitern die Funktionalität eines bestimmten Objektes bei Laufzeit '? das 'neue ... (neu ... (neu ...))' ist ein Laufzeitanruf und ist gut, aber ein 'AwithXYZ anXYZ;' ist eine Vererbung zur Kompilierzeit und ist schlecht?
aus dem Code Beispiel Link kann ich sehen, dass die Anzahl der Klassendefinition ist fast das gleiche in beiden Implementierungen. Ich erinnere mich an Bücher in einem anderen Designmuster wie "Head first design patterns". Sie verwenden als Beispiel Sternbuzz Kaffee und sagen, dass traditionelle Vererbung eine 'Klassenexplosion' Ursache für jede Kombination von Kaffee verursachen wird, würden Sie mit einer Klasse dafür kommen. Aber ist es nicht das gleiche für Dekorateur in diesem Fall? Wenn eine Dekorateur Klasse jede abstrakte Klasse nehmen und sie dekoriert, dann denke ich es Explosion nicht verhindern, sondern aus dem Code Beispiel: Sie haben genaue Anzahl der Klassendefinitionen, nicht weniger ...
Könnte jemand helfen erklären?
Vielen Dank,
weiß [Wann sollten wir Dekorateur Entwurfsmuster verwenden und nicht die Vererbung] (http: // www. singhajit.com/decorator-design-pattern/) –