Mixins verstehen: Ein modularer Ansatz für Klassenerweiterungen
Ein Mixin ist ein Software-Designmuster, das die Zusammensetzung mehrerer Klassen ermöglicht und Folgendes bereitstellt eine Möglichkeit, die Fähigkeiten einer Basisklasse zu erweitern, ohne direkt von ihr zu erben. Diese Technik wird oft als „abstrakte Unterklassen“ bezeichnet, da sie dem Konzept der Vererbung ähnelt, jedoch einen flexibleren und detaillierteren Ansatz aufweist.
Um zu verstehen, wie ein Mixin funktioniert, schauen wir uns das folgende Beispiel an:
// Number class
struct Number {
int n;
void set(int v) { n = v; }
int get() const { return n; }
};
// Undoable mixin
template
struct Undoable : public BASE {
int before;
void set(int v) {
before = BASE::get();
BASE::set(v);
}
void undo() { BASE::set(before); }
};
In diesem Beispiel bietet das Undoable-Mixin die Funktionalität, den vorherigen Wertsatz rückgängig zu machen. Es umschließt im Wesentlichen eine BASE-Klasse, sodass jede Klasse von ihr erben und die Möglichkeit erhalten kann, ihre Set-Methode rückgängig zu machen.
Um eine neue Klasse zu erstellen, die mehrere Mixins kombiniert, können wir Vorlagen-Metaprogrammierung verwenden:
// ReUndoableNumber class
typedef Undoable UndoableNumber;
typedef Redoable ReUndoableNumber;
In diesem Fall erbt ReUndoableNumber sowohl vom Undoable- als auch vom Redoable-Mixin und erhält die Fähigkeit, seine eingestellten Werte rückgängig zu machen und wiederherzustellen.
Mixins sind besonders nützlich, wenn wir Sie möchten vorhandene Klassen um orthogonale Funktionen erweitern, die für das Kernverhalten der Klasse möglicherweise nicht relevant sind. Sie bieten einen modulareren und zusammensetzbareren Ansatz im Vergleich zur herkömmlichen Vererbung, bei der Klassen direkt von einer übergeordneten Klasse erben müssen, um deren Funktionalität zu erhalten.
Darüber hinaus ermöglichen Mixins die Erstellung wiederverwendbarer Bausteine, die leicht kombiniert werden können Bilden Sie komplexere Klassen. Diese Flexibilität ermöglicht es Entwicklern, ihre Klassen mit der spezifischen Funktionalität anzupassen, die sie benötigen, ohne die Einschränkungen der herkömmlichen Vererbung.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3