包含/委任
COM でオブジェクトを再利用するための最も一般的なメカニズムは、 包含/委任です。 この種の再利用は、ほとんどのオブジェクト指向言語とシステムで見慣れた概念です。 内部オブジェクトを使用する必要がある外部オブジェクトは、内部オブジェクトのオブジェクト クライアントとして機能します。 外側のオブジェクトは内部オブジェクトを "含む" ので、外側のオブジェクトが内部オブジェクトのサービスを必要とする場合、外側のオブジェクトは内部オブジェクトのメソッドに実装を明示的に委任します。 つまり、外側のオブジェクトは内部オブジェクトのサービスを使用して自身を実装します。
外側のオブジェクトと内部オブジェクトが同じインターフェイスをサポートする必要はありませんが、外部オブジェクトが実装しないインターフェイスを実装し、外側のオブジェクトのメソッドを内部オブジェクト内の対応するメソッドの呼び出しとして実装するオブジェクトを含めるのは確かに妥当です。 ただし、外側のオブジェクトと内部オブジェクトの複雑さが大きく異なる場合、外側のオブジェクトは、内部オブジェクトに実装されているインターフェイス メソッドの呼び出しを委任することによって、そのインターフェイスのメソッドの一部を実装できます。
外側のオブジェクトの包含を実装するのは簡単です。 外側のオブジェクトは、他のクライアントと同様に使用する必要がある内部オブジェクトを作成します。 これは新しいものではありません。プロセスは、外側のオブジェクトがそれ自体で文字列オブジェクトと見なされない場合でも、特定の文字列関数を実行するために使用する C++ 文字列オブジェクトを含む C++ オブジェクトのようなものです。 次に、内部オブジェクトへのポインターを使用して、外側のオブジェクト内のメソッドを呼び出すと、内部オブジェクト メソッドの呼び出しが生成されます。
関連トピック