public class Singleton //三步走
{
private static Singleton instance = null;//第一步:定义私有静态属性
private Singleton() { //第二步:构造函数私有化
}
public static Singleton GetInstance(){//第三步:提供一个静态方法,由类调用
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
优点:
(1)由于系统中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象,单例模式无疑可以提高系统的性能。
(2)允许可变数目的实例。可以对单例模式进行扩展,设计指定个数的实例对象,即节省系统资源,又解决了由于单例对象共享过多有损性能的问题。
缺点:
(1) 单例类的职责过重,在一定程度上违背了单一指责原则。因为单例模式即提供业务方法,又提供了创建对象的方法,将对象功能和创建耦合在一起。
(2)很多面向对象语言的GC垃圾回收技术,实例化的对象长期不使用,系统会认为是垃圾,自动销毁并回收资源,这将导致共享的单例对象状态的丢失。
饿汉式单例:
(1) 单例模式在整个应用程序的生命周期中只存在一个实例
(2) 懒汉式单例就是这个单例类的这个唯一实例new是在第一次使用 GetInstance()时实例化的
(3) 如果不调用 GetInstance()的话,这个实例是不会存在的,即为 null
(4) 形象点说呢,就是你不去动它的话,它自己是不会实例化的,所以可以称之为懒汉。
饿汉式单例:
(1)其由于肚子饿了,所以到处找东西吃,人也变得主动了很多,所以根本就不需要别人来催他实例化单例类的为一实例
(2)其自己就会主动实例化单例类的这个唯一类。
public class Singleton
{
private static readonly Singleton singleton = new Singleton();
private Singleton()
{
}
public static Singleton GetInstance()
{
return singleton;
}
}