.Net 单例模式(Singleton)
问题描述
单例模式 Singleton Pattern
问题解决
(1)单例模式简介
Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。这就提出了一个问题如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任。
单例模式特点
(1.1)一个类有且仅有一个实例
(1.2)类提供一个全局的访问点
(2)单例模式的实现
(2.1)简单实现
上述实现的优点
(1)直到对象要求时,才进行实例的初始化,这种实现方法称为“惰性实例化”,惰性实例化,避免了程序启动时创建不必要的Singleton。
上述实现的缺点
(1)这种实现对于多线程环境并不安全,可能实例化多个对象,例如可能存在两个线程进行instance==null的判断,然后创建两个单例对象,这就违背了单例模式的设计意图。
(2.2)安全的线程
以上的实现保证了单例对象在多线程的情况下只会创建一个,padlock增加了额外的开销
(2.3)双重锁定
这种实现方式对多线程来说是安全的,线程不是每次都加锁,只有判断对象实例没有被创建时它才加锁,有了我们上面第一部分的里面的分析,我们知道,加锁后还得再进行对象是否已被创建的判断。它解决了线程并发问题,避免在获取 Instance 的调用中都出现独占锁定。它还允许您将实例化延迟到第一次访问对象时发生。实际上,应用程序很少需要这种类型的实现。大多数情况下我们会用静态初始化。这种方式仍然有很多缺点无法实现延迟初始化。
(2.4)静态初始化
此实现中,将在第一次引用类的任何成员创建实例,该类标记为 sealed 以阻止发生派生,而派生可能会增加实例。,变量标记为 readonly,这意味着只能在静态初始化期间(此处显示的示例)或在类构造函数中分配变量。它仍然可以用来解决 Singleton 模式试图解决的两个基本问题全局访问和实例化控制。公共静态属性为访问实例提供了一个全局访问点。,由于构造函数是私有的,不能在类本身以外实例化 Singleton 类;,变量引用的是可以在系统中存在的唯一的实例。
由于 Singleton 实例被私有静态成员变量引用,在类被对 Instance 属性的调用所引用之前,不会发生实例化。这种方法唯一的潜在缺点是,您对实例化机制的控制权较少。在 Design Patterns 形式中,您能够在实例化之前使用非默认的构造函数或执行其他任务。由于在此解决方案中由 .NET Framework 负责执行初始化,您没有这些选项。在大多数情况下,静态初始化是在 .NET 中实现 Singleton 的首选方法。
(2.5)延迟初始化
(3)单例模式的优缺点
(4)单例模式适用情况和应用场景
(5)具体实例
Singleton设计模式是一个非常有用的机制,可用于在面向对象的应用程序中提供单个访问点。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程