xml的解析有很多中 比如: Dom解析 Sax解析 等  在android中新增了一种很简单的解析方式 pull解析

解析xml我个人把它分成两大类 

      1 : 从JavaBean到xml 

      2 : 从xml 到JavaBean

由于抽象工厂的特点为: 提供一个创建一系列相关或相互依赖对象的接口,而没必要指定他们具体的类

可以将上述两类抽象到一个类中 ,代码如下:

interface XmlParseFactory{
    public BeanToXml getBeanToXml() ; //从JavaBean到xml 
    public XmlToBean getXmlToBean() ; //从xml到JavaBean
}
    BeanToXml为实现从JavaBean到xml转换的对象由于这种转换有很多方式,XmlToBean是从Xml到JavaBean的转换
可能是Dom解析、Sax解析、Pull解析 因此可以创建DomParseFactory,SaxParseFactory,PullParseFactory来返回具体的解析方式,例如 :DomParseFactory
class DomParseFactory implements XmlParseFactory{
    public BeanToXml getBeanToXml() {
        return new DomBeanToXml();
    }
    public XmlToBean getXmlToBean() {
        return new DomXmlToBean();
    }
}

 

    其中的DomBeanToXml表示的是Dom方式下从JavaBean到Xml的转换对象 该对象中应该包含一个具体的转换方法 (即从JavaBean到Xml在Dom解析下具体的代码实现);类推在Sax解析下应该也存在类似的对象SaxBeanToXml
该对象为Sax下从JavaBean到Xml的具体代码实现 同理也存在一个PullBeanToXml 很明显我们可以为三者抽象一个接口来指定转换的方法 即可以实现一个BeanToXml的接口
interface BeanToXml {
    public void Bean2Xml(String xmlPath) ; //xmlPath 表示xml的路径
}

 

    那么DomBeanToXml为: 
class DomBeanToXml implements BeanToXml{
    public void Bean2Xml(String xmlPath) {
        System.out.println("DomBeanToXml:具体实现");
    }
}

 

    SaxBeanToXml:
class SaxBeanToXml implements BeanToXml{
    public void Bean2Xml(String xmlPath) {
        System.out.println("SaxBeanToXml:具体实现");
    }
}

 


按照上面的分析可以得到应该也需要有一个XmlToBean:
interface XmlToBean {
    public void XmlToBean(Object bean) ;
}

 


在客户端的实现就比较简单:
public class AbstractFactoryDemo {
    public static void main(String[] args) {
           XmlParseFactory factory = new DomParseFactory() ;
           XmlToBean domXmlToBean =  factory.getXmlToBean() ;
           domXmlToBean.XmlToBean(null);
           
           factory = new SaxParseFactory() ;
           factory.getXmlToBean().XmlToBean(null) ;
           
    }
}

 

下面给出一个完整可允许的代码: 
package org.lkl.patterns.abstractfactory;

interface XmlParseFactory{
    public BeanToXml getBeanToXml() ;
    public XmlToBean getXmlToBean() ;
}

class DomParseFactory implements XmlParseFactory{
    public BeanToXml getBeanToXml() {
        return new DomBeanToXml();
    }
    public XmlToBean getXmlToBean() {
        return new DomXmlToBean();
    }
}

class SaxParseFactory implements XmlParseFactory{
    public BeanToXml getBeanToXml() {
        return new SaxBeanToXml();
    }
    public XmlToBean getXmlToBean() {
        return new SaxXmlToBean();
    }
    
}


interface BeanToXml {
    public void Bean2Xml(String xmlPath) ;
}

interface XmlToBean {
    public void XmlToBean(Object bean) ;
}


class DomXmlToBean implements XmlToBean{
    public void XmlToBean(Object bean) {
        System.out.println("DomXmlToBean:具体实现");
    }
     
}

class DomBeanToXml implements BeanToXml{
    public void Bean2Xml(String xmlPath) {
        System.out.println("DomBeanToXml:具体实现");
    }
}


class SaxXmlToBean implements XmlToBean{
    public void XmlToBean(Object bean) {
        System.out.println("SaxXmlToBean:具体实现");
    }
     
}

class SaxBeanToXml implements BeanToXml{
    public void Bean2Xml(String xmlPath) {
        System.out.println("SaxBeanToXml:具体实现");
    }
}



public class AbstractFactoryDemo {
    public static void main(String[] args) {
           XmlParseFactory factory = new DomParseFactory() ;
           XmlToBean domXmlToBean =  factory.getXmlToBean() ;
           domXmlToBean.XmlToBean(null);
           
           factory = new SaxParseFactory() ;
           factory.getXmlToBean().XmlToBean(null) ;
           
    }
}
完整代码

相关文章:

  • 2021-05-19
  • 2021-07-25
  • 2021-05-25
  • 2021-10-31
  • 2022-12-23
猜你喜欢
  • 2021-06-16
  • 2021-10-01
  • 2021-05-30
  • 2021-12-11
  • 2021-12-21
  • 2021-10-11
相关资源
相似解决方案