单例 xml

1、单例模式:作用就是保证 在应用程序的整个生命周期中,任何一个时刻,单例类的实例最多只有一个。应用:只有一个打印程序,只需要弹出一次Form。

定义:单例模式保证一个类仅有一个实例,同时这个类必须提供一个访问该类的全局访问点。

定义步骤:定义一个私有的静态全局保证唯一实例变量,类型就是改单例类本身。其次定义私有的构造函数,保证外部不能new来创建实例。定义外部可以访问的访问点,即静态方法,第一次访问就创建对象, 返回第一步的私有字段。

调用访问:Singleton.Singleton singletonOne =   Singleton.Singleton.GetInstance(); 
         Singleton.Singleton singletonTwo =   Singleton.Singleton.GetInstance();

实际上是同一个实例,第一个是在类内部创建了私有对象,第二个是返回的仍然是第一个的私有对象。???(为什么这个字段要私有)

实际上如果用多线程的话,有可能创建多个实例,需要对if null进行加锁处理,http://www.cnblogs.com/BoyXiao/archive/2010/05/07/1729376.html?login=1

Singleton 类

namespace Singleton 

    public class Singleton 
    { 
        //定义一个私有的静态全局变量来保存该类的唯一实例 
        private static Singleton singleton;

        /// <summary> 
        /// 构造函数必须是私有的 
        /// 这样在外部便无法使用 new 来创建该类的实例 
        /// </summary>
 
        private Singleton() 
        { 
        }

       /// <summary> 
        /// 定义一个全局访问点 
        /// 设置为静态方法 
        /// 则在类的外部便无需实例化就可以调用该方法 
        /// </summary> 
        /// <returns></returns>
 
        public static Singleton GetInstance() 
        { 
         
   //这里可以保证只实例化一次 
            //即在第一次调用时实例化 
            //以后调用便不会再实例化
 
            if (singleton == null
            { 
                singleton = new Singleton(); 
            } 
            return singleton; 
        } 
    } 
}

2、XML 引用System.Xml

节点与元素概念有点复杂,其实都是对象:

Node 对象是整个 DOM 的主要数据类型。

节点对象代表文档树中的一个单独的节点。

节点可以是元素节点、属性节点、文本节点,或者也可以是“节点类型”那一节中所介绍的任何一种节点。

即文本节点可没有子节点之类的。一个XML文件必须有且只能有一个根节点

  • 对于XML节点的探究:

    继续深入到没有子节点的单一节点,比如根节点第一个子节点的第二个子节点 this.firstChild.childNodes[0].childNodes[1],它返回的是一个XML对象(Object) 。这里需要特别注意,节点标签之间的数据本身也视为一个节点 this.firstChild.childNodes[0].childNodes[1].firstChild ,而不是一个值。

this.firstChild.childNodes[0].childNodes[1].nodeName 。注意比较获得节点名称和节点值的不同。

节点的所有属性返回一个通用对象(Object),比如根节点第六个子节点的第三个子节点的所有属性为: this.firstChild.childNodes[5].childNodes[2].attributes 。 获得其中的“地址”属性: this.firstChild.childNodes[5].childNodes[2].attributes.地址 。

DOM是文档对象模型,其实就是树状结构的文档。

每一个交接点叫一个节点,所以就会有根节点、叶节点和中间节点。
叶子节点会有自己的名和值,以前还会有属性的概念,现在已经不被推荐这么使用了。很多文章会把叶子节点称为元素节点。
(以上 http://blog.csdn.net/chaiyu2002/article/details/5967186)

区分大小写,XmlDocument doc=new XmlDocument();

简单操作: XmlDeclaration=doc.CreateDeclaration("1.0","utf-8",null) 创建节点作为根。返回第一行

doc.AppendChild(dec);Doc.Save("books.xml")  会出错!没有根节点。

XmlElement books=doc.CreateElements("books")  创建元素doc.AppendChild(books)

...再创建子元素。name1.InnerText(会将标签转化成&lt等),name1.InnerXml(可以用来添加标签)name1.setAtrribute("s","ee")

追加Xml:if(File.Exsit("books.xml")){doc.Load("books") ;root=doc.DocumentElement  得到根。 }

读取数据。foreach( var item in root.ChildNodes){item.innerText,....} doc.selectSingleNode("/order/Items").removeAll()



好的,以下是一个使用Java单例模式读取XML文件的示例代码: ```java import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class XMLReader { private static XMLReader instance; private XMLReader() {} public static XMLReader getInstance() { if (instance == null) { instance = new XMLReader(); } return instance; } public void read(String filename) { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(filename); Element root = doc.getDocumentElement(); NodeList nodeList = root.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; String name = element.getAttribute("name"); String value = element.getTextContent(); System.out.println(name + " = " + value); } } } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的示例代码中,我们使用了单例模式来创建XMLReader的唯一实例,避免了多次创建对象的开销。同时,我们将读取XML文件的代码封装在read()方法中,方便调用。调用方式如下: ```java XMLReader reader = XMLReader.getInstance(); reader.read("config.xml"); ``` 其中,config.xml是需要读取的XML文件名。调用read()方法后,程序会输出XML文件中所有元素的名称和值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值