看了一个代码,但是不知道用的是什么设计模式,一段关于解析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);
}
}
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);
}
}
解决方案 »
- 什么是钩子方法
- TCP连接和HTTP连接的关系
- java能否快速开发单机版数据库(只实现增删改查基本功能)?有实例吗?谢谢帮助!
- 问大家一个for循环的问题!急死了!我是菜鸟!
- 谁分析过struts源代码?
- 请教键盘响应事件?
- 谁有软件自动质量管理方面的论文,大约5万字左右(英文)
- java.net.URLConnection中getOutputStream()方法出现协议不支持输出流的错误,请问为何会出现此错误?
- 请问用java applete如何实现打印报表功能?
- 在java中如何判断当前主机的操作系统是UNIX或WINDOWS
- try....catch...finally
- java线程可否重名
你看一看parse方法是怎么实现的吧,我猜可能是这个方法的实现调用了handler方法里的某些方法,并且还提供了默认的handler
public class XMLTreeHandler extends DefaultHandler 而要实现我们自己的handler,应该覆盖DefaultHandler中的某些方法,这些方法会在parse方法中得到调用
以上仅仅是俺的猜测,俺对设计模式也不是很熟(^_^)