理解 Mixins:类扩展的模块化方法
mixin 是一种软件设计模式,允许组合多个类,提供一种扩展基类功能而不直接继承基类的方法。这种技术通常被称为“抽象子类”,因为它类似于继承的概念,但具有更灵活和更精细的方法。
要了解 mixin 的工作原理,让我们检查以下示例:
// 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); }
};
在此示例中,Undoable mixin 提供了撤消先前值集的功能。它本质上包装了一个 BASE 类,允许任何类继承它并获得撤消其 set 方法的能力。
要组成一个组合多个 mixin 的新类,我们可以使用模板元编程:
// ReUndoableNumber class
typedef Undoable UndoableNumber;
typedef Redoable ReUndoableNumber;
在这种情况下,ReUndoableNumber 继承自 Undoable 和 Redoable mixin,并获得撤消和重做其设置值的能力。
当我们希望使用可能与类的核心行为无关的正交功能来扩展现有类。与传统的继承相比,它们提供了更加模块化和可组合的方法,在传统继承中,类必须直接从父类继承才能获得其功能。
此外,mixin 允许创建可重用的构建块,这些构建块可以轻松组合到形成更复杂的类。这种灵活性使开发人员能够根据他们需要的特定功能定制他们的类,而不受传统继承的限制。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3