1 创建单例。
2 设置一些参数,过滤器。验证DTD什么的。
3 建立一个DocumentBuilder类对象。
4 同上。
http://blog.csdn.net/zhou2002/archive/2007/11/29/1907783.aspx

解决方案 »

  1.   

    DocumentBuilderFactory 这是一个抽象的类,所以不能直接实例...但是这个用newInstance实例了之后一个DocumentBuilderFactory对象..
    DocumentBuilderFactory  dbf =DocumentBuilderFactory.newInstance();,,,
    但是用DocumentBuilder db=dbf.newDocumentBuilder();这里是实例一个对象,是dom解析器对象(书上这样说).但是上面的实例(dbf )起的是一个什么作用呢???/急需求解
      

  2.   

    简单点说,就是把对象的创建和使用分离开了。你在所有的代码中都可以用同样的方式得到DocumentBuilder。你不需要知道怎么创建DocumentBuilder对象,比如用什么实现类,用什么初始化参数。这些都在另外的配置文件中,这样如果要实现全局的DOM解析器的替换,就不需要改动所有引用到的地方。
      

  3.   

    其实DocumentBuilder也是一个抽象类来的,是不能直接实例化的,而语句dbf.newDocumentBuilder()就创建了一个实例化的类了。
    举个例子:
    水果工厂 fruitFactory =  水果工厂.实例化(); //创建一个实例化的水工工厂
    水果 fruit = 水果工厂.创建一个水果();
    如果,调用“水果工厂.创建一个水果()”后,产生的可能是葡萄、也可能是西瓜,看这个方法里面是怎么写的,而西瓜是一个实体的东西,而水果只是一个抽象的东西
      

  4.   

    虽然我没完全看懂你所表达的意思...就工厂类这个问题,以下是我的看法...我所常用的 建一个静态工厂类.一个业务层接口,一个业务层具体实现方法类.当前台需要某种方法时,则是先向工厂发出一项请求,由业务接口去安排指定的实体业务去产生指定的方法.其操作流程可以打这么一个比方.比如我这里开的是一家某种产品的专卖店.
    专卖店的店主需要进货时. 会联系厂家的销售部门,销售部门接到订单后,会向其加工部门反应,加工部门去进行相关的操作.加工出产品...这样的好处是,店主不需要厂家如何生产这种商品,而厂家也不需要知道店家去如何销售...销售部门则起到了一个中转的过渡环节...再回到程序里来...比如在J2EE中,控制层需要一个方法时... 他会向工厂发出请求... 工厂类去实例化一个业务接口对应的业务实体类.  (达到MVC的作用.)
    其好处就在于,发但软件被反编译时,最多只能看到接口层,再也无法看到下面的实体业务...这里接口的作用是: 只说不做.
    实体业务层:它即说又要去做.
    控制层不管你们去怎么做.它只要得它想要的方法...
    MVC+DAO 设计模式就是这样的原理....这是我所理解的,如果理解有误,请不要见笑....
      

  5.   

    对了我再补充一下它们之间的关系....
    刚刚好像说的不是很完整 ...
    再打个比方...
    工厂类     只需要去安排谁做. (我不管你怎么做,任务来了,我让你做,你就得给我做. PS:领导级的人物!)
    实体接口   只说不做.        (你们给我去做XXX任务,领导发话,你们不做,领导会很生气,后果会很严重!  PS:科长,班长,一类的人物)
    实体业务   即要说又要做.     (头发话,大家干活啊...  PS: 底线工人类,叫干啥就得干啥...)
      

  6.   

    谢谢你们的回答,但是在java 的DocumentBuilderFactory 这个抽象类里面的 newDucomentFactorty 是个抽象的,并没..
    那么,我们用DocumentBuilder   db=dbf.newDocumentBuilder();这样来调用,为什么会返回一个值呢??(dbf是DocumengBuilderFactory的实例).
    DocumentBuilderFactory 中 newDucomentFactorty 的代码是    public abstract DocumentBuilder newDocumentBuilder()
            throws ParserConfigurationException;
        大家可以看java的src.rar里面的有
      

  7.   

    我同意7楼的说法,实际就是这样
    一般就是:工厂 ,DAO接口 ,DAO的实现类
    这样提高了代码的利用率,如果有变动,只需要对DAO实现类中的具体方法进行修改.
    工厂和DAO接口中都是抽象方法,只有DAO实现类中才有具体的方法
      

  8.   

    如果只是说工厂类的话,它的出现最初是解决一个类的实例化太复杂的问题.比如说我现在要实例化一个楼主
    楼主 本贴楼主 = new 楼主(xgj1988,Love J2ee,当前不在线,一个小三角);
    甚至情况更复杂,比如实例化楼主的时候要做许多处理,或者这个实例有特殊要求比如:
    楼主的当前状态经常变化或者从其他地方读取,没有被放在代码段中,而是放在其他地方,需要在实例化的过程中读取进来虽然可以 
    楼主 本贴楼主 = new 楼主();public class 楼主
    {
      public 楼主()
      {
        读取配置文件 当前楼主.xml
      }
    }
    然后有一个XML文件 当前楼主.xml<楼主>
      <ID>xgj1988</ID>
      <昵称>Love J2ee</昵称>
      <状态>不在线</状态>
      <专家等级>一个三角</专家等级>
    </楼主>那么楼主类的构造方法恐怕会比这个类中的其他方法还庞大...这时候工厂类就可以代替new来实例化楼主楼主 当前楼主 = 楼主工厂.生产当前楼主();public class 楼主
    {
      楼主(){}
    }class 楼主工厂
    {
      public static 楼主 生产当前楼主()
      {
        楼主 当前楼主 = new 楼主();
        当前楼主 = {进行相关处理};
        return 当前楼主;
      }
    }
    这么做的好处,至少调用"楼主工厂.生产当前楼主()"的时候,不用再关心当前楼主是打哪儿来的,怎么来的,可以专心的处理楼主而且也能方便的实现 "楼主工厂->楼主接口->当前楼主" 的思想,代码美观而可读性高,弱耦合,等等优点.....