委譲

delegation.png

委譲はオブジェクトコンポジションの極端な例である。[1]
委譲は「他人の力を利用する関係」[3]

委譲を用いるデザインパターン

statestrategyの目的は、要求を委譲するオブジェクトを変更することによって、オブジェクトの動作を変更することである。[1]

一部だけ委譲を使うデザインパターン

定義

あるオブジェクトの操作•振る舞いを一部他のオブジェクトに代替させる手法のこと。
委譲を行うオブジェクトは委譲先オブジェクトへの参照を持ち、必要に応じてその参照を切り替える事で動作にバリエーションを持たせる事ができる
一種の実装遅延、プラグイン機構である。
委譲を引き受けるオブジェクトはどのような操作を実装しなければならないか知っている必要があるため、インタフェースと併用される場合が多い。

委譲では1つの要求を2つのオブジェクトが扱う。
要求を受け取ったオブジェクトは委譲者(deligator)オペレーションを委譲する。
これは、サブクラスが親クラスに要求を渡すことと同様である。
しかし、継承の場合は、継承されたオペレーションは、C++ならばthis->メンバ関数 を用いて、要求を受け取ったオブジェクトを参照できる。
委譲でこれと同じ効果を実現するには、
要求を受け取ったオブジェクトが自身を委譲者に渡す。
そうすれば、委譲したオペレーションが受け手のオブジェクトを参照できるようになる。[1]
どうやら、has-a関係の一種のようだ。

利点

実行時に動作を合成することが容易であること。
合成する方法の変更が容易であること。[1]

欠点

動的でパラメータ化されたソフトウェアは、静的なソフトウェアよりも理解しにくい。
結局のところ委譲は、
設計を複雑にではなく簡単にする場合にのみ選択すべき技術である。[1]

サポートサイト Wikidot.com