zoukankan      html  css  js  c++  java
  • [java] 解析xml文档

    思路

    • 工厂模式时,常将类名放在xml文档中,实现配置与框架的解耦

    代码

    AbstractFactoryTest.java

     1 public class AbstractFactoryTest
     2 {
     3     public static void main(String[] args)
     4     {
     5         try
     6         {
     7             Product a;
     8             AbstractFactory af;
     9             af=(AbstractFactory) ReadXML1.getObject();
    10             a=af.newProduct();
    11             a.show();
    12         }
    13         catch(Exception e)
    14         {
    15             System.out.println(e.getMessage());
    16         }
    17     }
    18 }
    19 //抽象产品:提供了产品的接口
    20 interface Product
    21 {
    22     public void show();
    23 }
    24 //具体产品1:实现抽象产品中的抽象方法
    25 class ConcreteProduct1 implements Product
    26 {
    27     public void show()
    28     {
    29         System.out.println("具体产品1显示...");
    30     }
    31 }
    32 //具体产品2:实现抽象产品中的抽象方法
    33 class ConcreteProduct2 implements Product
    34 {
    35     public void show()
    36     {
    37         System.out.println("具体产品2显示...");
    38     }
    39 }
    40 //抽象工厂:提供了厂品的生成方法
    41 interface AbstractFactory
    42 {
    43     public Product newProduct();
    44 }
    45 //具体工厂1:实现了厂品的生成方法
    46 class ConcreteFactory1 implements AbstractFactory
    47 {
    48     public Product newProduct()
    49     {
    50         System.out.println("具体工厂1生成-->具体产品1...");
    51         return new ConcreteProduct1();
    52     }
    53 }
    54 //具体工厂2:实现了厂品的生成方法
    55 class ConcreteFactory2 implements AbstractFactory
    56 {
    57     public Product newProduct()
    58     {
    59         System.out.println("具体工厂2生成-->具体产品2...");
    60         return new ConcreteProduct2();
    61     }
    62 }
    View Code

    ReadXML1.java

     1 import javax.xml.parsers.*;
     2 import org.w3c.dom.*;
     3 import java.io.*;
     4 class ReadXML1
     5 {
     6     //该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象
     7     public static Object getObject()
     8     {
     9         try
    10         {
    11             //创建文档对象
    12             DocumentBuilderFactory dFactory=DocumentBuilderFactory.newInstance();
    13             DocumentBuilder builder=dFactory.newDocumentBuilder();
    14             Document doc;                           
    15             doc=builder.parse(new File("src/config1.xml"));        
    16             //获取包含类名的文本节点
    17             NodeList nl=doc.getElementsByTagName("className");
    18             Node classNode=nl.item(0).getFirstChild();
    19             String cName=classNode.getNodeValue();
    20             //System.out.println("新类名:"+cName);
    21             //通过类名生成实例对象并将其返回
    22             Class<?> c=Class.forName(cName);
    23               Object obj=c.newInstance();
    24             return obj;
    25          }  
    26          catch(Exception e)
    27          {
    28                    e.printStackTrace();
    29                    return null;
    30          }
    31     }
    32 }
    View Code

    config1.xml

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <config>
    3     <className>ConcreteFactory1</className>
    4 </config>
    View Code

    具体工厂1生成-->具体产品1...
    具体产品1显示...

  • 相关阅读:
    HDU 5585 Numbers
    HDU 3308 LCIS
    POJ 2991 Crane
    POJ 1436 Horizontally Visible Segments
    POJ 3667 Hotel
    HaiHongOJ 1003 God Wang
    【SDOI 2008】 递归数列
    5月19日省中提高组题解
    【HDU 1588】 Gauss Fibonacci
    【POJ 3233】Matrix Power Series
  • 原文地址:https://www.cnblogs.com/cxc1357/p/13023854.html
Copyright © 2011-2022 走看看