ビジターは、それが動作するオブジェクトの状態を変更することは受け入れられますか? このような操作は、アンチパターンとは見なされませんか?ビジターパターン:オブジェクトの状態を変更しますか?
5
A
答えて
4
訪問したオブジェクトを修正することはまったく問題ありません。
ビジタークラスの名前が適切であることを確認するだけで、副作用があることは明らかです。
+1
例は、すべてのノード(モンスター、タワー、何でも)を訪問し、(私はここでゲームを考えています)強度を上げるビジターです無作為には25%から50%の間である。それは訪問したものを突然変異させる有効な訪問者です。 – mawalker
2
訪問者はパブリックインターフェイスのみを使用し、訪問者はオブジェクトを無効な状態にすることはできません。ビジターは、訪問したオブジェクトの状態を自由に変更できます。
1
他の答えに言及したように、訪問中にオブジェクトを突然変異させる際の反パターンはありません。すべての可変状態と同様に、マルチスレッドのシナリオでは注意が必要です。他のスレッドが訪問者と同時にオブジェクトに突然変異を起こしていないことを確認してください。
関連する問題
- 1. 状態を変更せずにオブジェクトを空にしますか?
- 2. 状態変更後の初期状態を返します
- 3. エンティティの状態を変更します。
- 4. オブジェクトの状態を変更するだけのメソッドをテストしますか?
- 5. 状態変更メソッド(TypeError)で状態オブジェクトのオブジェクトプロパティにアクセスできません
- 6. reactjs状態オブジェクト内のオブジェクト属性を変更する
- 7. ドラフトエディタ状態の親状態を更新していますか?
- 8. ビジュアル状態を使用してオブジェクトのCanvas.Zindexを変更できますか?
- 9. 状態パラメータを変更し、状態をリロードしません。実現可能か?
- 10. ハンドル状態更新オブジェクト
- 11. 状態変更コード
- 12. 変更状態(JS)
- 13. React - アイテムまたは親の状態を変更しますか?
- 14. AppControllerからMenuControllerのNSMenuItem状態を変更しますか?
- 15. 子コンポーネントの親コンポーネントの状態を変更し、その状態をプロパティとして渡し、子コンポーネントの状態を変更します。
- 16. オブジェクトが状態を変更するのを待つ方法
- 17. 休止状態:休止状態の接続を変更する
- 18. アラートダイアログボックスからチェックボックスの状態を変更します
- 19. ツリービューのチェック状態を変更していますか?
- 20. 状態モナド:値を変更せずに状態を変更する
- 21. イオンボタン状態の変更
- 22. Redux-Sagaの状態変更
- 23. Reduxレデューサーオン状態の変更
- 24. Arduinoトグルスイッチの状態変更
- 25. 裏面のイオンネストされた状態は状態を変更しません。
- 26. リアクションネイティブ状態変数を変更する
- 27. ローカル状態のオブジェクトの状態を、反応するjs内で更新する
- 28. ルート変更時にRedux状態を更新します
- 29. 状態を更新していない状態を更新しています
- 30. カスタムUIButtonの状態を変更する
訪問者はオブジェクトを操作するため、パブリックメソッドとプロパティにアクセスできます。オブジェクトの必要なカプセル化を設定するのはあなた次第です。ビジターは、MarkVisited()やInit()などのパブリックメソッドの呼び出しによって、何かを表示するための読み取り専用プロパティーにアクセスしたり、情報を収集したり、オブジェクト状態を変更することができます。訪問者のペイロードのように見える –
サードパーティのクラスのソースコードがない場合に役立ちます。ビジターでメソッドを宣言し、複数の関連するオブジェクトにまたがる共通の操作を追加することができます –