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