单例模式:保证类的实例的唯一,并提供一个访问他的全局访问点.
场景:
1.在winform我们只让指定窗体打开一次。(如windows任务管理器)
2.打印机可以存在多个任务,但一次只能处理一个任务。
3.一个系统只能有一个单号生成器。
为什么要使用单例这样模式?
比如打开多个windows任务管理器,那么他显示的都是系统的进程,都是一样的,内容一直,对象完全重复,浪费内存资源。
使用单例,提供了全局唯一的使用对象,节约了系统资源,对相同对象的频繁操作肯定是提高了性能。
class Program
{
static void Main(string[] args)
{
Singleton s1 = Singleton.GetInstance();
Singleton s2 = Singleton.GetInstance();
//结果为True对象是一样的,创建类的变量后他们回去堆中找,相同的地址就是指向同一个对象
Console.WriteLine(s1 == s2);
}
}
public class Singleton
{
//单例模式:保证类的实例的唯一,并提供一个访问他的全局访问点.
private Singleton() { }
//构造方法的作用就是实例化对象,这里私有不让外部随意创建本类实例.
//不让外部操作,那就自己生产,自己内部控制自己的实例
private static Singleton s = null;
//外部不能创建,那么怎么提供给外界本类的实例,且只有一个呢?
//提供全局的访问点,类名.方法=>静态方法,返回本类对象
public static Singleton GetInstance()
{
if (s == null)
{
//懒汉式,当别人调用的时候,自己在进行加载.
s = new Singleton();
}
//将实例化后的对象返回给调用者,对象存在堆中,用户继续调用后还是本对象.
return s;
}
}
单例在应用程序中是静态的,在系统使用的时候需要注意了。