visitor -對象行爲型模式

1.意圖
  表示一個作用於某個對象結構中的各個元素的操作。它使你可以在不改變各個元素的類的
  前提下定義這些元素的新操作
  2.參與者
  Visitor -爲該對象結構ConcreteElement的每一個類聲明一個visit操作。
  ConcreteVisitor 實現每個visitor聲明的操作
  Element -定義一個Accept,它以一個訪問者爲參數
  ConcreteElement - 實現Accept操作,該操作一個一個訪問者爲參數
  ObjectStructure -能枚舉它的類
                  -可以提供一個高層的接口以允許訪問者訪問它的元素
                  -可以是複合對象或者一個集合

3.結構

4.代碼

public interface Element {
	void accept(Visitor v);
}

public interface Visitor {
	void visitor(ConcreteElementA A);
	void visitor(ConcreteElementB B);
	void visitor(ConcreteElementC C);
}

public class ConcreteElementA implements Element {

	@Override
	public void accept(Visitor v) {
		v.visitor(this);
	}

}

public class ConcreteElementB implements Element {

	@Override
	public void accept(Visitor v) {
		v.visitor(this);
	}

}

public class ConcreteElementC implements Element {

	@Override
	public void accept(Visitor v) {
		v.visitor(this);
	}

}

public class ConcreteVisitor implements Visitor {

	@Override
	public void visitor(ConcreteElementA A) {
		System.out.println("ConcreteElementA");
	}

	@Override
	public void visitor(ConcreteElementB B) {
		System.out.println("ConcreteElementB");

	}

	@Override
	public void visitor(ConcreteElementC C) {
		System.out.println("ConcreteElementC");
	}

}

public class Client {
	public static void main(String[] args) {
		List<Element> list = new ArrayList<Element>();
		list.add(new ConcreteElementA());
		list.add(new ConcreteElementB());
		list.add(new ConcreteElementC());
		Visitor v = new ConcreteVisitor();
		Iterator<Element> it = list.iterator();
		while(it.hasNext()){
			Element e = it.next();
			e.accept(v);
		}
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章