为什么要是用单例模式?
有一些对象我们只需要一个,比方说:线程池、缓存、对话框、日志对象,打印机的驱动程序的对象。如果这些对象制造出多个实例的话,会导致很多问题产生,例如:程序的行为异常、资源使用过量或者不一致。
确保一个类只有一个实例,并提供一个全局访问点。
全局变量和单件模式?
全局变量基本上是对对象的静态引用。在使用全局变量时会出现急切实例化和延迟实例化。而单件模式确保类只有一个实例并提供全局访问。全局变量可以提供全局访问,但是不能确保只有一个实例。
饿汉式:
初始时就创建出了单例对象,可以增加线程安全,但是造成资源浪费。
class mySingle
{
static mySingle singleLeton = new mySingle();
private mySingle(){}
public static mySingle getInstance()
{
return singleLeton;
}
}
懒汉式:不安全,在调用获取实例时才进行实例的创建,线程不同调用时可能会出现不同的实例,导致线程不安全。
class mySingle
{
static mySingle singleLeton;
private mySingle(){}
public static mySingle getInstance()
{
if (singleLeton == null)
singleLeton = new mySingle();
return singleLeton;
}
}
测试
static void Main(string[] args)
{
mySingle m1 = mySingle.getInstance();
mySingle m2 = mySingle.getInstance();
Console.WriteLine(m1 == m2);
Console.ReadLine();
}
输出
True