当前位置:编程学习 > C#/ASP.NET >>

c# 单例模式

java 和 C#中,用到的全局变量,最好用单例模式来实现管理。
我常用XML来保存系统的配置参数,用单例模式来管理。
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using System.IO;
using System.Xml;

/// <summary>
/// CitySingleton 的摘要说明
/// </summary>
public class CitySingleton
{
    List<City> _cities = null;
    private static CitySingleton _instance;
    private CitySingleton()
    {
        _cities = new List<City>();
        //装载所有站点的数据
        LoadData();        
    }

    /// <summary>
    /// 获取单例
    /// </summary>
    public static CitySingleton Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new CitySingleton();                
            }
            return _instance;
        }
    }


    /// <summary>
    /// 重新装载数据
    /// </summary>
    public void ReloadData()
    {
        _cities.Clear();
        LoadData();
    }

    /// <summary>
    /// 装载数据
    /// </summary>
    private void LoadData()
    {
        //打开风力的配置文件
        string filename = HttpContext.Current.Server.MapPath(@"~\parameters\Cities.xml");
        FileInfo file = new FileInfo(filename);

        if (file.Exists)
        {
            try
            {
                XmlDocument xml = new XmlDocument();
                xml.Load(filename);
                //获取风力的节点
                XmlNodeList cities = xml.SelectNodes(@"/Cities/City");
                if (cities.Count > 0)
                {
                    foreach (XmlNode city in cities)
                    {
                        if (city.HasChildNodes)
                        {
                            //将数据保存到WindLevel中
                            City c = new City();
                            foreach (XmlNode field in city)
                            {
                                switch (field.Name.Trim())
                                {
                                    case "CityName":
                                        c.CityName = field.InnerText.Trim();
                                        break;
                                    case "Longitude":
                                        c.Longitude = (float)Double.Parse(field.InnerText.Trim());
                                        break;
                                    case "Latitude":
                                        c.Latitude = (float)Double.Parse(field.InnerText.Trim());
                                        break;
                                    case "Zoom":
                                        c.Zoom = (float)Double.Parse(field.InnerText.Trim());
                                        break;
                                    case "TextDirection":
                                        c.TextDirection = field.InnerText.Trim();
                                        break;
                                    default:
                                        break;
                                }
                            }
                            _cities.Add(c);
                        }
                    }
                }
            }
            catch
            {
            }
        }

    }

    /// <summary>
    /// 返回符合条件得城市列表
    /// 放大
    /// </summary>
    /// <param name="zoom"></param>
    /// <returns></returns>
    public List<City> GetCities(float zoom)
    {
        List<City> cities = new List<City>();
        for (int i = 0; i < _cities.Count; i++)
        {
            City c = _cities[i];
            if (c.Zoom >= zoom)
            {
                cities.Add(c);
            }
        }
        return cities;
        
    }

}
--------------------编程问答-------------------- --------------------编程问答-------------------- 问题是? --------------------编程问答-------------------- 分享帖啊!!顶  --------------------编程问答-------------------- 什么意思呀 --------------------编程问答--------------------
引用楼主 czzfr 的回复:
java 和 C#中,用到的全局变量,最好用单例模式来实现管理


static最好用单例模式?这就好像每天都好像裹着卫生巾,累不累啊。

static就是static,这就足够了。 --------------------编程问答-------------------- 每天回帖有10分! --------------------编程问答-------------------- 什么问题撒,散分? --------------------编程问答-------------------- 先理解什么 是单例模式 --------------------编程问答-------------------- 楼上 正解 --------------------编程问答-------------------- 单例模式,单例模式 --------------------编程问答-------------------- 拿分 走人。
呵呵~~~~
lz有考虑过单实例和静态类区别和使用范围吗? --------------------编程问答-------------------- 不知所云 --------------------编程问答-------------------- --------------------编程问答-------------------- http://www.cnblogs.com/zhenyulu/articles/37246.html
个人觉得这个说的更好 --------------------编程问答-------------------- C#的static class特性提供了对singleton模式的原生支持,为什么不用呢? --------------------编程问答-------------------- --------------------编程问答-------------------- 楼主想要说什么?

--------------------编程问答-------------------- 回复就有分拿吗?下载分还是其他的?求解 --------------------编程问答-------------------- 给楼主提个建议,你的这种实现不是线程安全的,在多线程环境不能保证只创建一个实例 --------------------编程问答--------------------
引用楼主  的回复:
java 和 C#中,用到的全局变量,最好用单例模式来实现管理。

哪来的断言? --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 我也才学到单例模式。。。 --------------------编程问答-------------------- 木有看明白 --------------------编程问答-------------------- 散分帖么?来,接分喽! --------------------编程问答-------------------- 木有看明白 
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,