Java Visitor Pattern(ビジターモード)
2967 ワード
ビジターモード(Visitor Pattern)では、要素クラスの実行アルゴリズムを変更するビジタークラスを使用します.このようにして、要素の実行アルゴリズムは、アクセス者が変化するにつれて変化することができる.このタイプの設計モードは動作モードに属する.モードによっては、エレメントオブジェクトがアクセス者オブジェクトを受け入れ、エレメントオブジェクト上の操作を処理できます.
キーコード:データ・ベース・クラスには、アクセス者を受け入れ、自身をアクセス者に参照する方法があります.
長所:1、単一職責の原則に合致する.2、優れた拡張性.3、柔軟性.欠点:1、具体的な要素は訪問者に詳細を公表し、ディミットの原則に違反している.2、具体的な要素の変更は難しい.3、依存逆転の原則に違反し、具体的な類に依存し、抽象に依存していない.
注意:アクセス者は、レポート、UI、ブロッキング、フィルタなどの機能を統合できます.は、要素を表すインタフェースを定義する. 上記のクラスを拡張したエンティティクラスを作成します. は、アクセス者を表すインタフェースを定義する. は、上記のクラスを実装したエンティティ・アクセス者を作成する. ComputerPartDisplayVisitorを使用してComputerのコンポーネントを表示します. 印刷結果
キーコード:データ・ベース・クラスには、アクセス者を受け入れ、自身をアクセス者に参照する方法があります.
長所:1、単一職責の原則に合致する.2、優れた拡張性.3、柔軟性.欠点:1、具体的な要素は訪問者に詳細を公表し、ディミットの原則に違反している.2、具体的な要素の変更は難しい.3、依存逆転の原則に違反し、具体的な類に依存し、抽象に依存していない.
注意:アクセス者は、レポート、UI、ブロッキング、フィルタなどの機能を統合できます.
/**
* 1. 。
* @author mazaiting
*/
public interface ComputerPart {
public void accept(ComputerPartVisitor visitor);
}
/**
* 2. 。
* @author mazaiting
*/
public class Computer implements ComputerPart{
public void accept(ComputerPartVisitor visitor) {
visitor.visit(this);
}
}
/**
* 2. 。
* @author mazaiting
*/
public class Keyboard implements ComputerPart{
public void accept(ComputerPartVisitor visitor) {
visitor.visit(this);
}
}
/**
* 2. 。
* @author mazaiting
*/
public class Monitor implements ComputerPart{
public void accept(ComputerPartVisitor visitor) {
visitor.visit(this);
}
}
/**
* 2. 。
* @author mazaiting
*/
public class Mouse implements ComputerPart{
public void accept(ComputerPartVisitor visitor) {
visitor.visit(this);
}
}
/**
* 3. 。
* @author mazaiting
*/
public interface ComputerPartVisitor {
/*public void visit(Computer computer);
public void visit(Mouse mouse);
public void visit(Keyboard keyboard);
public void visit(Monitor monitor);*/
public void visit(T t);
}
/**
* 4. 。
* @author mazaiting
*/
public class ComputerPartDisplayVisitor implements ComputerPartVisitor {
public void visit(T t) {
System.out.println(t.getClass().getName());
}
/*public void visit(Computer computer) {
System.out.println("Displaying Computer.");
}
public void visit(Mouse mouse) {
System.out.println("Displaying Mouse.");
}
public void visit(Keyboard keyboard) {
System.out.println("Displaying Keyboard.");
}
public void visit(Monitor monitor) {
System.out.println("Displaying Monitor.");
}*/
}
/**
* 5. ComputerPartDisplayVisitor
* Computer 。
* @author mazaiting
*/
public class Client {
public static void main(String[] args) {
ComputerPart computer = new Computer();
computer.accept(new ComputerPartDisplayVisitor());
}
}
com.mazaiting.visitor.Computer