Wenn dies das Dekorationsmuster ist. Was ist der Unterschied zwischen Dekorationsmuster und Zusammensetzung? Ich habe Beispiele für dieses Muster gesehen, bei dem Vererbung verwendet wird. Zum Beispiel das Java-Beispiel auf Wikipedia.
Ich sehe nicht die Notwendigkeit, Vererbung überhaupt zu verwenden, oder fehle ich etwas?
Dekoratormuster per Definition wird die gleiche Schnittstelle wie die zu dekorierende Komponente implementieren. Die Idee ist, dass der Client-Code nicht geändert werden muss. Es kann sich auf die gleiche Abstraktion verlassen, die es früher verwendet hat.
Zum Beispiel:
%Vor% Wenn Sie die Klasse NoisyMovable
notieren, handelt es sich um einen Dekorator, da sie die IMovable
-Abstraktion implementiert und dieselbe umschließt.
Damit müssen Sie nicht viele Klassen wie NoisyVehicle
, NoisyTruck
, NoisyCar
usw. erstellen. Nur die Car
, Truck
sind genug; Sie können das Rauschen hinzufügen, indem Sie den Einzeldekorator verwenden.
Die Komposition muss andererseits nicht dieselbe Implementierung der von ihr implementierten Schnittstelle umbrechen. Es kann eine Schnittstelle implementieren und jede andere umbrechen.
Was Sie falsch verstanden haben, ist, dass Ihre Truck
-Klasse die Instanz von Vehicle
übernimmt. Es sollte keine Instanz von IMovable
sein. Es sollte mit jeder Implementierung von IMovable
funktionieren.
Was ist der Unterschied zwischen Dekorationsmuster und Zusammensetzung?
Konzeptionell ändert ein Dekorator das Verhalten des (einzelnen) Objekts, das es umschließt, während das zusammengesetzte (Muster) Verhalten auf der Kombination der (mehreren) Objekte basiert, die es aggregiert.
Ich sehe nicht die Notwendigkeit, Vererbung überhaupt zu verwenden, oder fehle ich etwas?
Die Vererbung ist nützlich, damit Sie mehrere Dekoratoren haben und verschachteln können. Zum Beispiel ein SelfDriver
, das ein Truck
umschließt, das ein Vehicle
umschließt. Ignoriere IUnloadable
, wäre der zweite Dekorator
SelfDriver
:
Der Code würde so aussehen:
%Vor%Das Objektdiagramm würde so aussehen:
Tags und Links c# inheritance design-patterns composition