2015-12-30 5 views
5

ビジターは、それが動作するオブジェクトの状態を変更することは受け入れられますか? このような操作は、アンチパターンとは見なされませんか?ビジターパターン:オブジェクトの状態を変更しますか?

+0

訪問者はオブジェクトを操作するため、パブリックメソッドとプロパティにアクセスできます。オブジェクトの必要なカプセル化を設定するのはあなた次第です。ビジターは、MarkVisited()やInit()などのパブリックメソッドの呼び出しによって、何かを表示するための読み取り専用プロパティーにアクセスしたり、情報を収集したり、オブジェクト状態を変更することができます。訪問者のペイロードのように見える –

+0

サードパーティのクラスのソースコードがない場合に役立ちます。ビジターでメソッドを宣言し、複数の関連するオブジェクトにまたがる共通の操作を追加することができます –

答えて

4

訪問したオブジェクトを修正することはまったく問題ありません。

ビジタークラスの名前が適切であることを確認するだけで、副作用があることは明らかです。

+1

例は、すべてのノード(モンスター、タワー、何でも)を訪問し、(私はここでゲームを考えています)強度を上げるビジターです無作為には25%から50%の間である。それは訪問したものを突然変異させる有効な訪問者です。 – mawalker

2

訪問者はパブリックインターフェイスのみを使用し、訪問者はオブジェクトを無効な状態にすることはできません。ビジターは、訪問したオブジェクトの状態を自由に変更できます。

1

他の答えに言及したように、訪問中にオブジェクトを突然変異させる際の反パターンはありません。すべての可変状態と同様に、マルチスレッドのシナリオでは注意が必要です。他のスレッドが訪問者と同時にオブジェクトに突然変異を起こしていないことを確認してください。

関連する問題