• [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显示...

  • 相关阅读:
    Node Node
    二叉排序树的实现
    Matlab Tricks(十五) —— 圆的正确画法
    Matlab Tricks(十五) —— 圆的正确画法
    Matlab Tricks(十四) —— 句柄(handle)(图形对象属性的读取与修改)
    Matlab Tricks(十四) —— 句柄(handle)(图形对象属性的读取与修改)
    (机器学习/计算机视觉/深度学习)代码
    (机器学习/计算机视觉/深度学习)代码
    论文的发表流程、会议的组织流程
    论文的发表流程、会议的组织流程
  • 原文地址:https://www.cnblogs.com/cxc1357/p/13023854.html
Copyright © 2020-2023  润新知