什么时候使用Visitor访问者模式?
??????集合对象大多数情况下都是同类对象的聚集,对集合对象的操作也就是对同类对象的操作。但是,如果集合对象中保存的对象不同,该如何对这些不同类型的对象进行操作?通常会根据对象的类型进行判断再进行操作,就容易出现很多if else语句。如果采用访问者模式,就可以很优雅的解决此类问题,访问者可以利用多态对每一种对象进行访问。
??????Dom4J中的访问者模式:
?
?
?
具体的Document遍历操作如下:
?
public abstract class AbstractDocument extends AbstractBranch implements Document {。。。/** * <p> * <code>accept</code> method is the <code>Visitor Pattern</code> * method. * </p> * * @param visitor * <code>Visitor</code> is the visitor. */ public void accept(Visitor visitor) { visitor.visit(this); DocumentType docType = getDocType(); if (docType != null) { visitor.visit(docType); } // visit content List content = content(); if (content != null) { for (Iterator iter = content.iterator(); iter.hasNext();) { Object object = iter.next(); if (object instanceof String) { Text text = getDocumentFactory() .createText((String) object); visitor.visit(text); } else { Node node = (Node) object; node.accept(visitor); } } } }。。。}?
?
访问者模式更适用于被访问者相对固定,而访问方式易发生变化的情况。?
1 楼 kingquake21 2011-06-03 第一段代码没有着色