单例模式就是在程序的全局只能有一个实例。
在实际项目中应用场情:
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); } } }