在前面的介绍里面,争对每种特定的XML写一个特定的解析类,当需要解析的XML数量比较多时,比较烦琐,代码的重复量也比较大。在设计模式里面有一种模式叫工厂方法模式,比较适合这种情况。工厂方法模式是一种基于框架的模式,我们可以将固定不变的方法放在一个框架里(父类)实现,变化的方法定义为抽象方法,然后在子类里面实现。
具体实现如下:
1.抽象框架类:AbstractXmlParserFactory,实现如下;
public abstract class AbstractXmlParserFactory {
protected abstract void startDocumentProcess(XmlPullParser xpp);
protected abstract void startTagProcess(XmlPullParser xpp);
protected abstract void textTagProcess(XmlPullParser xpp);
protected abstract void endTagProcess(XmlPullParser xpp);
protected abstract Object getParserData();
public void parserXml(InputStream xmlStream) throws XmlPullParserException,
IOException {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(xmlStream, "UTF-8");
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_DOCUMENT) {
startDocumentProcess(xpp);
} else if (eventType == XmlPullParser.START_TAG) {
startTagProcess(xpp);
} else if (eventType == XmlPullParser.END_TAG) {
endTagProcess(xpp);
} else if (eventType == XmlPullParser.TEXT) {
textTagProcess(xpp);
}
eventType = xpp.next();
}
}
public Object exportData() {
return getParserData();
}
}
2.定义我们的数据类:
class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}