ミックスインを理解する: クラス拡張へのモジュール式アプローチ
ミックスインは、複数のクラスの構成を可能にするソフトウェア デザイン パターンです。基本クラスを直接継承せずに、基本クラスの機能を拡張する方法。この手法は、継承の概念に似ていますが、より柔軟で詳細なアプローチをとっているため、「抽象サブクラス」と呼ばれることがよくあります。
ミックスインの仕組みを理解するために、次の例を見てみましょう:
// 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 ミックスインは、前の値セットを元に戻す機能を提供します。これは基本的に BASE クラスをラップし、任意のクラスがそのクラスを継承し、その set メソッドを元に戻す機能を獲得できるようにします。
複数のミックスインを組み合わせた新しいクラスを作成するには、テンプレート メタプログラミングを使用できます:
// ReUndoableNumber class
typedef Undoable UndoableNumber;
typedef Redoable ReUndoableNumber;
この場合、ReUndoableNumber は Undoable ミックスインと Redoable ミックスインの両方を継承し、設定値を元に戻したりやり直したりする機能を獲得します。
ミックスインは、次の場合に特に便利です。クラスのコア動作に関連しない可能性がある直交機能を使用して既存のクラスを拡張したいと考えています。これらは、クラスがその機能を得るために親クラスから直接継承する必要がある従来の継承と比較して、よりモジュール式で構成可能なアプローチを提供します。
さらに、ミックスインを使用すると、簡単に組み合わせることができる再利用可能なビルディング ブロックを作成できます。より複雑なクラスを形成します。この柔軟性により、開発者は従来の継承の制約を受けることなく、必要な特定の機能を使用してクラスを調整できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3