XML解析的设计模式的问题

Eniak 2010-02-27 07:18:01
看了一个代码,但是不知道用的是什么设计模式,一段关于解析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);
}
}

...全文
215 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
NickCheng 2010-03-01
  • 打赏
  • 举报
回复
引用 1 楼 bao110908 的回复:
并不是所有的代码都有设计模式的,无语了,见到代码就是模式!

火龙果说的对……
icy_csdn 2010-03-01
  • 打赏
  • 举报
回复
呵呵,java编码模式!
Eniak 2010-03-01
  • 打赏
  • 举报
回复
恩,应为我看策略模式,策略模式是一个参数,是处理算法的对象,但是这个是两对象,处理的对象,和处理对象算法的对象,所以想问问是个什么设计模式
zx8813443 2010-02-28
  • 打赏
  • 举报
回复
saxParser.parse( new File(filename), handler);

你看一看parse方法是怎么实现的吧,我猜可能是这个方法的实现调用了handler方法里的某些方法,并且还提供了默认的handler
public class XMLTreeHandler extends DefaultHandler 


而要实现我们自己的handler,应该覆盖DefaultHandler中的某些方法,这些方法会在parse方法中得到调用


以上仅仅是俺的猜测,俺对设计模式也不是很熟(^_^)
zx8813443 2010-02-28
  • 打赏
  • 举报
回复
貌似 模板方法 设计模式
realreachard 2010-02-27
  • 打赏
  • 举报
回复
saxParser.parse( new File(filename), handler)

类的方法就是这么设置的....
  • 打赏
  • 举报
回复
并不是所有的代码都有设计模式的,无语了,见到代码就是模式!

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧