C# 实例 -------单例模式

昨天晚上,我的老师(算是我的亲戚)给了我一段代码,让我看看。现copy如下:

 

1、CitySingleton.cs文件代码:

 

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(@"~/XML/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;
    }
}

 

 

2、City.cs文件代码:

 

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;

/// <summary>
/// City 的摘要说明
/// </summary>
public class City
{
    string _cityname = "";
    float _longitude = 0;
    float _latitude = 0;
    float _zoom = 0;
    string _textdirection = "";

    //与台风的距离,在显示测距时用
    float _distance = 0;

    public City()
    {
        //
        // TODO: 在此处添加构造函数逻辑
        //
    }

    /// <summary>
    /// 城市名称
    /// </summary>
    public string CityName
    {
        get { return _cityname; }
        set { _cityname = value; }
    }

    /// <summary>
    /// 城市经度
    /// </summary>
    public float Longitude
    {
        get { return _longitude; }
        set { _longitude = value; }
    }

    /// <summary>
    /// 城市纬度
    /// </summary>
    public float Latitude
    {
        get { return _latitude; }
        set { _latitude = value; }
    }

    /// <summary>
    /// 地图放大因子
    /// </summary>
    public float Zoom
    {
        get { return _zoom; }
        set { _zoom = value; }
    }

    /// <summary>
    /// 文字方向
    /// </summary>
    public string TextDirection
    {
        get { return _textdirection; }
        set { _textdirection = value; }
    }

    /// <summary>
    /// 与台风之间的距离
    /// </summary>
    public float Distance
    {
        get { return _distance; }
        set { _distance = value; }
    }
}

 

 

3、Cities.xml文件代码:

 

<?xml version="1.0" encoding="utf-8" ?>
<Cities>
  <City>
    <CityName>广州</CityName>
    <Longitude>113.287047</Longitude>
    <Latitude>23.17691</Latitude>
    <Zoom>50</Zoom>
    <TextDirection>TOP</TextDirection>
  </City>
  <City>
    <CityName>深圳</CityName>
    <Longitude>114.045941</Longitude>
    <Latitude>22.626807</Latitude>
    <Zoom>50</Zoom>
    <TextDirection>RIGHT</TextDirection>
  </City>
  <City>
    <CityName>香港</CityName>
    <Longitude>114.156</Longitude>
    <Latitude>22.373</Latitude>
    <Zoom>50</Zoom>
    <TextDirection>BOTTOM</TextDirection>
  </City>
  <City>
    <CityName>江门</CityName>
    <Longitude>112.965032</Longitude>
    <Latitude>22.569499</Latitude>
    <Zoom>50</Zoom>
    <TextDirection>LEFT</TextDirection>
  </City>
</Cities>

 

 

 

源代码在这里了,现在说说,为什么要用这段代码:

 

首先说说单例模式顾名思义,就是只能有一个实例,事实上单例模式有三点:

 

一是某个类只能有一个实例,不能new一个实例;二是它必须自行创建这个实例,当然是这类自身里;三是它必须自行向整个系统提供这个实例。至于什么情况需要使用单例模式,我现在也不是很懂。

 本段程序主要是实现从XML文件中提取信息到相关的类,从而实现类的封装,高类聚低耦合,也就是面向对象OO编程的部分应用。具体怎样可以copy去调试,记得如果要实现它,需要在Default.aspx.cs文件中调用:

 

protected void Page_Load(object sender, EventArgs e)
    {

          CitySingleton city = CitySingleton.Instance;

 

             ………………

             ………………

             ………………

             后面的类怎么用,如果你看懂了,我想你应该知道怎么调试,怎么用了(记得断点调试,我是最近才学会用断点调试的噢)。

    }

 

 

 

这段代码就是单例模式的实现

 

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;
        }
    }

PS:欢迎讨论,大家相互学习指教。QQ:153941061  E-mail:yangkunlisi@qq.com

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值