看了一个代码,但是不知道用的是什么设计模式,一段关于解析XML的代码,下面的两个类,在VSX的这两行       SAXParser saxParser = factory.newSAXParser( );
      saxParser.parse( new File(filename), handler);
其中,第一行是一个工厂模式,生成一个 SAXParser 的解析器
其中,第二行 saxParser.parse( new File(filename), handler) 这个用的是什么设计模式呢?
public class VSX { public TreeModel parse(String filename) {
    SAXParserFactory factory = SAXParserFactory.newInstance( );
    XMLTreeHandler handler = new XMLTreeHandler( );
    try {
      // Parse the input.
      SAXParser saxParser = factory.newSAXParser( );
      saxParser.parse( new File(filename), handler);
    }
    catch (Exception e) {
      System.err.println("File Read Error: " + e);
      e.printStackTrace( );
      return new DefaultTreeModel(new DefaultMutableTreeNode("error"));
    }
    return new DefaultTreeModel(handler.getRoot( ));
}
}          public class XMLTreeHandler extends DefaultHandler {
private DefaultMutableTreeNode root, currentNode;  

public DefaultMutableTreeNode getRoot( ) {
return root;
} // SAX parser handler methods
public void startElement(String namespaceURI, String lName, String qName,
                             Attributes attrs) throws SAXException {
String eName = lName; // Element name
if ("".equals(eName)) 
eName = qName;
      
Tag t = new Tag(eName, attrs);

DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(t);

if (currentNode == null) {
root = newNode;
}
else {
// Must not be the root node
currentNode.add(newNode);
}
currentNode = newNode;
} public void endElement(String namespaceURI, String sName, String qName)
throws SAXException {
currentNode = (DefaultMutableTreeNode)currentNode.getParent( );
} public void characters(char buf[], int offset, int len) throws SAXException {
String s = new String(buf, offset, len).trim( );
((Tag)currentNode.getUserObject( )).addData(s);
}
}

解决方案 »

  1.   

    saxParser.parse( new File(filename), handler)  类的方法就是这么设置的....
      

  2.   

    saxParser.parse( new File(filename), handler);
    你看一看parse方法是怎么实现的吧,我猜可能是这个方法的实现调用了handler方法里的某些方法,并且还提供了默认的handler
    public class XMLTreeHandler extends DefaultHandler 而要实现我们自己的handler,应该覆盖DefaultHandler中的某些方法,这些方法会在parse方法中得到调用
    以上仅仅是俺的猜测,俺对设计模式也不是很熟(^_^)