ここまで試してみた結果のまとめ

・自己インスタンス書き換え
 外部の自身を指すポインタのアドレスを渡す必要がある=複数あった場合は厄介
 newでコンストラクタを呼び出すと厄介

・delegateスイッチング+可変データアダプタ
 オーバーロードできない
 プロパティ風呼び出しができない

・Has-a
 オーバーヘッドはあるが、無視できることが多いかも
 ExchangerとInterfaceで2回定義を書くのがやや冗長

・分岐
 オーバーヘッドが大きい

・Factory
 動的な変更が内部的には行えない
 自身を指すポインタが複数あると厄介

自分の目的だとHas-aかデリゲートスイッチングの2択になりそうですが、
もう少し煮詰めてみて面白そうなら報告いたします。