・ある機能を持っているオブジェクトは生成時に共有レジストリに登録しなければならない
 あるオブジェクトがその機能を持っているかどうかの問い合わせはそのレジストリから検索してあたりがあるかどうかで調べる
 オブジェクトが死んだらレジストリから削除しなければならない
 拡張によって特殊な機能が増えと新しいレジストリを作らなければならない

・ある機能を持っているオブジェクトかどうかそのオブジェクト本人に問い合わせる
 拡張によって特殊な機能が増えてもその追加された機能を継承するクラスだけQueryInterfaceメソッドに1行追加するだけで良い


どっちが目的を明確に表していて、シンプルで理解しやすく、効率がいいのか、一目瞭然だろう