6

私が理解しているように、訪問者パターンの典型的な仕様では、どのようにトラバースするかを決定するのは訪問されたオブジェクトであり、一般に、それらは 1 つのトラバース順序のみをサポートします。(たとえば、ここまたはここを参照してください。)

訪問者がオブジェクト階層をどのようにトラバースするかを決定する場所である、ダブルディスパッチの同じ使用の名前はありますか? 私のアプリケーションでは、ドキュメント モデル タイプの非常に異種のコレクションが、エクスポート操作などのために訪問者にプッシュしています。ただし、さまざまなプロセッサ (訪問者) がすべて、たとえば幅優先の順序でトラバースする必要があると言うのは硬直しているように思えます。それらの一部は、モデルのサブセットのみに関係する場合や、モデルの一部を特殊な順序で処理する必要がある場合があります。

訪問者パターンの名前を非標準的な方法で使用して、他の開発者を混乱させることを懸念しています。私が提案しているものに名前はありますか?

また、訪問者にトラバーサルを制御させない理由があるかどうかも尋ねます。これは、通常の訪問者の定式化に、私が見逃している知恵がある場合に備えてです。関連する可能性がある場合、アプリケーションは Java です。

4

1 に答える 1

4

設計を明確に保つために、トラバーサル ロジックを Iterator にカプセル化できます。訪問者または訪問者は、反復子を使用して、次に訪問するノードを決定できます。

ウィキペディアの Visitor の例では、 Car クラスが次のように訪問の順序を制御していることがわかります。

public void accept(ICarElementVisitor visitor) {    
    for(ICarElement elem : elements) {
        elem.accept(visitor);
    }
    visitor.visit(this);    
}

Iteratorパターン に従って、そのメソッドからICarElementIteratorを返すにトラバーサル ロジックをカプセル化するのは簡単です。ICarElementnext()

于 2014-07-06T01:02:37.590 に答える