首页 > 代码库 > 单例模式
单例模式
1.什么是单例模式?
单例模式就是确保一个类只有一个实例,而且自行实例化向整个系统提供唯一实例。
单例模式分为饿汉式单例类和懒汉式单例类。
饿汉式单例类:类加载时就进行实例化。
懒汉式单例类:第一次引用类时才进行实例化。
2.饿汉式单例类例子
/// <summary>
/// 饿汉式单例类
/// </summary>
public class Singleton
{
private static Singleton _instance = new Singleton();
private Singleton()//构造函数为私有的,该类不能被继承
{
}
public static Singleton Getinstance()
{
return _instance;
}
}
当类被加载时,类的私有构造函数就会被调用,单例类的唯一实例就被创建出来了,单例类一个最重要的特点就是私有构造函数,从而避免外界利用构造函数创造出任意多的实例。
4.懒汉式单例类的例子
public class Lsingleton {
private static Lsingleton _singleton = null;
private Lsingleton()
{
}
public static Lsingleton Getinstance()
{
if (_singleton == null)
{
_singleton = new Lsingleton();
}
}
return _singleton;
}
}
懒汉式是第一次被调用的时候创建唯一模式。
5.多线程下的单例模式
/// <summary>
/// 多线程下的单例模式
/// </summary>
public class Lsingleton {
private static Lsingleton _singleton = null;
private static object _lock = new object();
private Lsingleton()
{
}
public static Lsingleton Getinstance()
{
if (_singleton == null)
{
lock(_lock)
{
_singleton = new Lsingleton();
}
}
return _singleton;
}
}
6.单例模式的优点
由于单例模式在内存中只有一个实例,减少了内存的开支,特别是一个对象需要频繁的创建和销毁,而创建和销毁的性能又无法优化时单例模式的优势非常明显。
单例模式只生成一个实例,减少了系统性能的开销。
单例模式可以避免对资源的多重占用。例如一个写文件的动作由于只有一个实例存在内存中,避免了对同一资源文件的同时操作。
单例模式可以在系统设置全局的访问站点,优化和共享资源的访问,例如可以设计一个单例类负责所有数据表的映射处理。
单例模式