Visitorパターン2024 年の最新の入門チュートリアル。このコースでは 入門,実現, について学習できます。

Visitorパターン

ビジターパターン(Visitorパターン)で、我々は、訪問者のクラスを使用し、それが実行アルゴリズムの要素クラスを変更します。 この方法では、アルゴリズムの実装とビジター要素が変更されることができます。 デザインパターンのこのタイプは、行動パターンに属します。 訪問者は要素オブジェクトを操作するオブジェクトを扱うことができるようにパターンよると、要素オブジェクトは、ターゲットの訪問者を受け入れました。

入門

意図:データおよびデータ操作の分離の主な構造。

主に解決する:安定したデータ構造と可変作動結合の問題を。

使用するときは:多くの異なると無関係なアクション内のオブジェクトのターゲット構造の必要性を、これらのアクションは、クラスにこれらのパッケージへの訪問者の使用をこれらのオブジェクトのクラスの「公害」を回避する必要があります。

修正方法:クラスがインタフェースを提供するために、外国人観光客のプラス受信内部にアクセスされます。

キーコード:訪問者を受け入れるためのメソッドを持つデータ・ベース・クラス、自身の着信来場者への参照。

応用例:あなたは友人の家にゲストであり、あなたが訪問者です、友人が友人の説明を通して、あなたの訪問を受け入れ、その後、友人の記述は、訪問者のパターンであると判断し、作ります。

利点:1、単一責任の原則に沿っインチ2、優れた拡張性を提供します。 3、柔軟性。

短所:1、お客様の特定の要素は、デメテルの原則の違反の詳細を発表しました。2、変更の特定の要素より難しいです。 3は、依存関係反転原則に違反して、抽象化に依存していない特定のクラスに依存しています。

使用シナリオ:1、オブジェクトクラス構造に対応するオブジェクトはほとんど変化しないが、多くの場合、このオブジェクト構造に新しい操作を定義する必要があります。2、多くの異なる無関係なアクション内のオブジェクトのターゲット構造の必要性が、これらのアクションは、これらのオブジェクトのクラスの「公害」を回避する必要があり、我々はあなたが新しい操作を追加するときに、これらのクラスを変更する必要はありません。

注:訪問者が機能を統一することができ、レポート、UI、インターセプトとフィルタを行うことができます。

実現

私たちは、許容できる動作ComputerPartインタフェースの定義を作成します。キーボード、マウス、モニターコンピュータがComputerPartインタフェースエンティティクラスを実現。 我々は、訪問者に操作の種類を定義する別のインターフェイスComputerPartVisitorを定義します。コンピュータが適切な行動を取るようにエンティティの訪問者を使用します。

VisitorPatternDemoは、我々は、訪問者のパターンの使用を実証するために、クラスのコンピュータ、ComputerPartVisitorクラスの使用を示します。

VisitorパターンUMLダイアグラム

ステップ1

要素を表すインターフェイスを定義します。

ComputerPart.java

パブリックインターフェイスクラスComputerPart {
   公共ボイド(ComputerPartVisitor computerPartVisitor)を受け入れます。
}

ステップ2

クラスの上のエンティティクラスを拡張作成します。

Keyboard.java

パブリッククラスKeyboardは{ComputerPartを実装します

   @Override
   公共ボイド(ComputerPartVisitor computerPartVisitor)を受け入れます{
      computerPartVisitor.visit(この);
   }
}

Monitor.java

パブリッククラスモニターは{ComputerPartを実装します

   @Override
   公共ボイド(ComputerPartVisitor computerPartVisitor)を受け入れます{
      computerPartVisitor.visit(この);
   }
}

Mouse.java

パブリッククラスマウスは{ComputerPartを実装します

   @Override
   公共ボイド(ComputerPartVisitor computerPartVisitor)を受け入れます{
      computerPartVisitor.visit(この);
   }
}

Computer.java

パブリッククラスコンピュータは{ComputerPartを実装します
	
   ComputerPart []の部分;

   公共のコンピュータ(){
      部品=新しいComputerPart [] {新しいマウス()、新しいキーボード()、新しいモニター()};		
   } 


   @Override
   公共ボイド(ComputerPartVisitor computerPartVisitor)を受け入れます{
      以下のために(int型私= 0; iは<parts.length; iは++){
         パーツ[i]は.accept(computerPartVisitor)。
      }
      computerPartVisitor.visit(この);
   }
}

ステップ3

表現の訪問者インターフェイスを定義します。

ComputerPartVisitor.java

パブリックインターフェイスのComputerPartVisitor {
	公共ボイド訪問(コンピュータコンピュータ)。
	公共ボイド訪問(マウスマウス)。
	公共ボイド訪問(キーボードキーボード);
	公共ボイド訪問(モニタモニタ)。
}

ステップ4

訪問者は、エンティティは、上記のクラスを達成するために作成しました。

ComputerPartDisplayVisitor.java

パブリッククラスComputerPartDisplayVisitorは{ComputerPartVisitorを実装します

   @Override
   公共ボイド訪問(コンピュータコンピュータ){
      System.out.println( "コンピュータを表示しています。");
   }

   @Override
   公共ボイド訪問(マウスマウス){
      System.out.println( "。マウスの表示」)。
   }

   @Override
   公共ボイド訪問(キーボードキーボード){
      System.out.println( "キーボードを表示しています。");
   }

   @Override
   公共ボイド訪問(モニタモニタ){
      System.out.println( "モニターを表示しています。");
   }
}

ステップ5

コンピュータの一部を表示するComputerPartDisplayVisitorを使用してください

VisitorPatternDemo.java

パブリッククラスVisitorPatternDemo {
   公共の静的な無効メイン(文字列[] args){

      ComputerPartコンピュータ=新しいコンピュータ();
      computer.accept(新しいComputerPartDisplayVisitor());
   }
}

ステップ6

出力を確認します。

マウスを表示します。
キーボードを表示します。
モニターの表示。
表示しているコンピュータ。
Visitorパターン
10/30