Ein Mixin ist geeignet, wenn Sie Ihrer Klasse etwas Verhalten hinzufügen. z.B. die Möglichkeit, im Falle eines Sammlungs-Typs aufzuzählen. Sie können so viele Verhaltensweisen in Ihre Klasse einbinden, wie Sie möchten. Es ist eine nette Möglichkeit, den üblichen Code wiederzuverwenden; Sie erhalten grundsätzlich eine Reihe von Methoden kostenlos.
Ein Dekorateur auf der anderen Seite ist eher ein hinterhältiger Abfangjäger. Es stellt die gleiche öffentliche Schnittstelle wie das Zielobjekt bereit und enthält ein Zielobjekt, an das alle Clientaufrufe delegiert werden. Allerdings dekoriert es den Anruf mit einigen Vor- und/oder Nachbearbeitungen. z.B. Wenn ich Code für eine MyCollection schreibe, möchte ich, dass alle Aufrufe dieses Typs protokolliert werden. Ich könnte einen neuen Decorator MyCollectionWithTimeStampedLogging ableiten, die beide von einer ICollection-Basis stammen, so dass sie mit dem Client identisch aussehen. Der Decorator würde eine Instanz von ICollection als einen Ctor-Parameter nehmen und Aufrufe an ihn delegieren. z.B. Add würde so aussehen
public void Add(int item)
{
_logger.log(String.Format("{0} Add called with param {1}", DateTime.Now, item.ToString());
_collection.Add(item);
_logger.log(String.Format("{0} Add completed with param {1}", DateTime.Now, item.ToString());
}
Ein Dekorator ist also ein bisschen näher an dem, was Aspect Oriented Programming (AOP) tut, und ein Mixin ändert nur Ihre bestehenden Klassen? – leeand00
@ leeand00 - Art von; AOP ist viel mehr als nur Dekorateure, denke ich. Mixins sind in dynamischen Sprachen vorherrschend, mit einem Mixin "mischen" Sie eine Reihe von Methoden in Ihre Klassendefinition ein. z.B. Sie können Load- und Save-Implementierungen (die eine Klasse widerspiegeln und öffentliche Eigenschaften auf Datenträger schreiben/schreiben) in ein Modul Persistable schreiben und dann in mehrere Klassen einmischen. Alle diese Klassen können jetzt auf Festplatte gespeichert werden. – Gishu
Mit AOP (mit denen ich vertraut bin als ... sagen Mixins) können Sie 3 verschiedene Dinge, die mit den ausgewählten Schnittstellen passieren können, angeben, Sie können eine Pre-Aktion, eine Post-Aktion und eine statt-von angeben Aktion. – leeand00