单例模式就是在程序的全局只能有一个实例。

在实际项目中应用场情:

1、有唯一性要求,整个应用程序只允许有一个实例(日志,聊天服务器转发点,windows 任务管理器。全局只允许有一个。)

2、资源节约(实例的时候需要占用很多资源,对象之间没有状态的时候(没有差异化)。例如,数据库访问,微软的sqlhelper类)

思路:

1、定义一个只读的静态的"类"的实例,供外部使用

        /// <summary>
        /// readonly 目的在于禁止外部修改对象,保证唯一性。
        /// static  目的在于让系统启动的时候创建这个对象。
        /// </summary>
        public readonly static SingletonOne singleton = new SingletonOne();

2、私有构造函数,禁止外部创建实例化对象

        /// <summary>
        /// 私有的构造函数,目的在于禁止外部创建实例
        /// </summary>
        private SingletonOne()
        {
            ///这个地方可以动态配置。根据需要配置这个单例
            var par = System.Configuration.ConfigurationManager.AppSettings["ssss"].ToString();
        }

外部调用:

SingletonOne.singleton.Write("写入日志");

经典单例源码:

    public class SingletonOne
    {

        /// <summary>
        /// readonly 目的在于外部修改这个对象,这样可以保证他们是唯一的。
        /// static  目的在于让系统启动的时候创建这个对象。
        /// </summary>
        public readonly static SingletonOne singleton = new SingletonOne();

        /// <summary>
        /// 私有的构造函数,目的在于禁止外部创建实例
        /// </summary>
        private SingletonOne()
        {
            ///这个地方可以动态配置。根据需要配置这个单例
            var par = System.Configuration.ConfigurationManager.AppSettings["ssss"].ToString();
        }

        /// <summary>
        /// 写入锁文件
        /// </summary>
        private object Write_lock = new object();

        public void Write(string txt)
        {
            ///在写入文件的时候一定要加锁,因为文件同时只允许一个对象访问。
            lock (Write_lock)
            {
                File.WriteAllText("c:\\1.txt", txt);
            }
        }
    }

 

posted on 2015-12-25 11:43  梦回过去  阅读(203)  评论(0编辑  收藏  举报