基本概念
委譲を行うオブジェクトは委譲先オブジェクトへの参照を持ち、必要に応じてその参照を切り替える事で動作にバリエーションを持たせる事ができる。
一種の実装遅延、プラグイン機構である。
一例としては、オブジェクトの編集を行う時、編集の前処理、後処理を本処理と独立させ委譲先に任せる事で、オブジェクト本体の変更を最小限にとどめ局所性を向上させる、などがある。
(中略)
委譲を引き受けるオブジェクトはどのような操作を実装しなければならないか知っている必要があるため、インタフェースと併用される場合が多い。#include <iostream> struct ExampleInterface { virtual void Function() = 0; }; class Something { public: void Print() { std::cout << "Something::Print() is called." << std::endl; } }; class SomethingDelegator:public ExampleInterface { Something *something; public: SomethingDelegator( Something *something ):something( something ) { } void Function() { // SomethingDelegatorに対するFunction関数の呼び出しをSomethingのPrint関数に委譲している something->Print(); } }; int main() { Something source; SomethingDelegator delegate( &source ); // SomethingDelegatorがSomethingに委譲した事によりSomethingのPrint関数が呼ばれる ExampleInterface &example = delegate; example.Function(); return 0; }