Visitor访问者模式---------学习dom4j时遇到的顺便拿来交流
dom4j遍历xml文档树有种很特别的方式就是访问者(Visitor)模式,初次接触Visitor模式,写出个人理解大家交流!Visitor访问者模式定义:作用于某个对象树中各个对象的操作. 它可以使你在不改变这些对象树本身的情况下,<span style="">定义作用于这些对象树各个节点的新操作。
先看以下代码:Person为简单的vo类
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee;">http://www.blogjava.net/Images/OutliningIndicators/None.gifpackage org.bulktree.visitor;
http://www.blogjava.net/Images/OutliningIndicators/None.gif
http://www.blogjava.net/Images/OutliningIndicators/None.gifimport java.util.ArrayList;
http://www.blogjava.net/Images/OutliningIndicators/None.gifimport java.util.Collection;
http://www.blogjava.net/Images/OutliningIndicators/None.gifimport java.util.Iterator;
http://www.blogjava.net/Images/OutliningIndicators/None.gifimport java.util.List;
http://www.blogjava.net/Images/OutliningIndicators/None.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif/** *//**
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif *
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif * @author bulktree Email: laoshulin@gmail.com
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif * @date Aug 10, 2008
http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif */
http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gifpublic class ReadCollection http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif private Collection c = null;
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif ReadCollection() http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif /**//*
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif * 准备数据-String对象-Person对象-Integer对象-List对象
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif */
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif String str = "bulktree.laoshulin";
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif Person person = new Person("bulktree", "22", "M");
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif Integer a = new Integer(99);
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif /**//*
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif * 使用范型
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif */
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif List<String> list = new ArrayList<String>();
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif list.add("BULKTREE");
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif list.add("LAOSHULIN");
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif list.add("OAKERTREE");
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif c = new ArrayList();
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif c.add(str);
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif c.add(person);
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif c.add(a);
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif c.add(list);
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif /** *//**
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif * 遍历Collection中的每一个对象并打印
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif */
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif public void testCollection() http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif Iterator iter = getCollection().iterator();
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif while (iter.hasNext()) http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif Object o = iter.next();
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif if (o instanceof String) http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif System.out.println("String--> " + o.toString());
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif } else if (o instanceof Person) http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif readPerson((Person) o);
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif } else if (o instanceof Integer) http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif Integer inta = (Integer) o;
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif System.out.println(inta.intValue());
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif } else if (o instanceof List) http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif readList((List) o);
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif public Collection getCollection() http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif return c;
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif private void readPerson(Person person) http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif System.out.println("person-name-> " + person.getName());
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif System.out.println("person-age-> " + person.getAge());
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif System.out.println("person-sex-> " + person.getSex());
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif private void readList(List<String> list) http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif /**//*
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif * 增强的for循环
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif */
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif for (String s : list) http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif System.out.println(s);
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif public static void main(String[] args) http://www.blogjava.net/Images/dot.gif{
http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif new ReadCollection().testCollection();
http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif}
http://www.blogjava.net/Images/OutliningIndicators/None.gif
页:
[1]