Visitor定義
作用於某個對象群中各個對象的操作
在Java中
為何使用Visitor?
Java的Collection(包括Vector和Hashtable)是我們最經常使用的技術
Iterator iterator = erator()
while (iterator
Object o = iterator
if (o instanceof Collection)
messyPrintCollection((Collection)o);
else if (o instanceof String)
System
else if (o instanceof Float)
System
else
System
}
在上例中
很顯然
如何使用Visitor?
針對上例
public interface Visitor
{
public void visitCollection(Collection collection);
public void visitString(String string);
public void visitFloat(Float float);
}
在這個接口中
有了訪問者
我們定義這個接口叫Visitable
public interface Visitable
{
public void accept(Visitor visitor);
}
好了
public class ConcreteElement implements Visitable
{
private String value;
public ConcreteElement(String string) {
value = string;
}
//定義accept的具體內容 這裡是很簡單的一句調用
public void accept(Visitor visitor) {
visitor
}
}
再看看訪問者的Concrete實現:
public class ConcreteVisitor implements Visitor
{
//在本方法中
public void visitCollection(Collection collection) {
Iterator iterator = erator()
while (iterator
Object o = iterator
if (o instanceof Visitable)
((Visitable)o)
}
public void visitString(String string) {
System
}
public void visitFloat(Float float) {
System
}
}
在上面的visitCollection我們實現了對Collection每個元素訪問
至此
使用Visitor模式的前提
對象群結構中(Collection) 中的對象類型很少改變
可見使用Visitor模式是有前提的
如果Visitor也經常變化
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27651.html