8

ビジターがレシーバーの状態を変更できるようにすることは一般的に受け入れられますか、それとも代わりにコマンドパターンにする必要がありますか?

4

4 に答える 4

6

ビジターパターンの目的は、クラス階層を変更せずに、その階層に新しい操作を追加できるようにすることです。読み取り専用操作のみが受け入れられることを示唆している人を見たことがありません。唯一の制限は、追加された操作がクラス階層のパブリックインターフェイスのみを使用する必要があることです。

于 2010-05-18T14:11:42.310 に答える
2

何かの状態を変更するのが良いか悪いかを包括的に述べることはできないと思います。訪問ロジック自体に影響を与えない限り、状態を変更しても問題ないと思います。たとえば、フォルダ構造の下にあるすべてのファイルにアクセスし、ファイル名を大文字に変更するビジターを作成できます。

于 2010-05-18T14:05:04.417 に答える
1

レシーバーを変更する訪問者のMicrosoftの例は、ExpressionVisitorです。ExpressionVisitorクラスの目的は、式ツリーを変更することです。したがって、Microsoftは少なくともそれが許容できると考えていると思います。

于 2011-07-21T16:47:06.073 に答える
1

各パターンには、独自の長所、短所、およびユースケースがあります。

Commandパターンを使用 して

  1. コマンドの呼び出し側と受信側を切り離します

  2. コールバックメカニズムを実装する

  3. 元に戻すおよびやり直し機能を実装する

  4. コマンドの履歴を維持する

Visitor以下のシナリオでパターンを使用します。

  1. 構造にグループ化されたさまざまなタイプのオブジェクトに対して、同様の操作を実行する必要があります
  2. 多くの別個の無関係な操作を実行する必要があります。操作をオブジェクト構造から分離します
  3. オブジェクト構造を変更せずに新しい操作を追加する必要があります

関連記事:

コマンドデザインパターンの使用

ビジターデザインパターンはいつ使用する必要がありますか?

于 2016-02-15T10:22:01.787 に答える