我的关于单例模式及常见写法分析(设计模式01) - 范文中心

我的关于单例模式及常见写法分析(设计模式01)

09/24

保证一个类仅有一个实例,并提供一个该实例的全局访问点。 ——《设计模式》

单例模式的概念很简单,下面以C#语言为例子,列出常见单例写法的优缺点。

1、简单实现

[csharp] view plain copy

1. public sealed class Singleton

2. {

3. static Singleton instance = null ;

4.

5. public void Show()

6. {

7. Console.WriteLine( "instance function");

8. }

9. private Singleton()

10. {

11. }

12.

13. public static Singleton Instance

14. {

15. get

16. {

17. if (instance == null )

18. {

19. instance = new Singleton();

20. }

21. return instance;

22. }

23. }

24. }

评注:

对于线程来说不安全

单线程中已满足要求

优点:

由于实例是在 Instance 属性方法内部创建的,因此类可以使用附加功能

直到对象要求产生一个实例才执行实例化;这种方法称为“惰性实例化”。惰性实例化避免了在应用程序启动时实例化不必要的 singleton 。 2

、线程的安全

[csharp] view plain copy

1. public sealed class Singleton

2. {

3. static Singleton instance = null ;

4. private static readonly object padlock = new object ();

5.

6. private Singleton()

7. {

8. }

9.

10. public static Singleton Instance

11. {

12. get

13. {

14. lock (padlock)

15. {

16. if (instance == null )

17. {

18. instance = new Singleton();

19. }

20. }

21.

22. return instance;

23. }

24. }

25. }

评注:

同一个时刻加了锁的那部分程序只有一个线程可以进入

对象实例由最先进入的那个线程创建

后来的线程在进入时(instence == null)为假,不会再去创建对象实例

增加了额外的开销,损失了性能

3、双重锁定

[csharp] view plain copy

1. public sealed class Singleton

2. {

3. static Singleton instance = null ;

4. private static readonly object padlock = new object ();

5.

6. private Singleton()

7. {

8. }

9.

10. public static Singleton Instance

11. {

12. get

13. {

14. if (instance == null )

15. {

16. lock (padlock)

17. {

18. if (instance == null )

19. {

20. instance = new Singleton();

21. }

22. }

23. }

24. return instance;

25. }

26. }

27. }

评注:

多线程安全

线程不是每次都加锁

允许实例化延迟到第一次访问对象时发生

4、静态初始化

[csharp] view plain copy

1. public sealed class Singleton

2. {

3. private static readonly Singleton instance = null ;

4. static Singleton()

5. {

6. instance = new Singleton();

7. }

8. private Singleton()

9. {

10. }

11. public static Singleton Instance

12. {

13. get

14. {

15. return instance;

16. }

17. }

18. }

评注:

依赖公共语言运行库负责处理变量初始化

公共静态属性为访问实例提供了一个全局访问点

对实例化机制的控制权较少(.NET代为实现)

静态初始化是在 .NET 中实现 Singleton 的首选方法

小注:

静态构造函数既没有访问修饰符,C#会自动把他们标记为private ,之所以必须标记为private ,

是为了阻止开发人员写的代码调用它,对它的调用总是由CLR 负责的。

5、延迟初始化

[csharp] view plain copy 1. public sealed class Singleton

2. {

3. private Singleton()

4. {

5. }

6. public static Singleton Instance

7. {

8. get

9. {

10. return Nested.instance;

11. }

12. }

13.

14. public static void Hello()

15. {

16. }

17.

18. private class Nested

19. {

20. internal static readonly Singleton instance = null ;

21. static Nested()

22. {

23. instance = new Singleton();

24. }

25. }

26. }

评注:

初始化工作由Nested 类的一个静态成员来完成,这样就实现了延迟初始化。

由于静态函数的调用时机,是在类被实例化或者静态成员被调用的时候进行调用,并且是由.net 框架来调用静态构造函数来初始化静态成员变量, 所以,如果按照写法四来写,再调用Hello 方法的时候,就会实例化出来Singleton 实例,这不是我们想看到的,因为我们有可能只是想用Hello 方法,而不是别的。

注意事项:

1、Singleton

模式中的实例构造器可以设置为protected 以允许子类派生。

2、Singleton 模式一般不要支持ICloneable 接口,因为这可能会导致多个对象实例,与Singleton 模式的初衷违背。

3、Singleton 模式一般不要支持序列化,因为这也有可能导致多个对象实例,同样与Singleton 模式的初衷违背。

4、Singletom 模式只考虑到了对象创建的管理,没有考虑对象销毁的管理。就支持垃圾回收的平台和对象的开销来讲,我们一般没有必要对其销毁进行特殊的管理。

总结:

1、Singleton 模式是限制而不是改进类的创建。

2、理解和扩展Singleton 模式的核心是“如何控制用户使用new 对一个类的构造器的任意调用”。

3、可以很简单的修改一个Singleton ,使它有少数几个实例,这样做是允许的而且是有意义的。


相关内容

  • 语文阅读理解解题技巧a
    高考语文阅读理解 文学作品的表达技巧 文学作品的表达技巧手法,是指作家运用了哪些写作原则.规律和方法来塑造文学形象和表现作品的 内容的.具体来说,对文章的表达技巧的分析主要指: 一是作家在表达方式运用上的技巧和文体知识运用方面的技巧, 二是 ...
  • 课题实施方案的撰写及课题研究结题报告范文
    课题实施方案的撰写及课题研究结题报告范文 一.开题报告的含义与作用 当课题确定之前,开题报告是课题负责人在调查研究的基础上撰写的,报请上级批准的选题计划.它主要 说明这个课题应该进行研究,自己有条件进行研究以及准备如何开展研究等问题,也可以 ...
  • 初中语文阅读考试技巧总汇(一)
    初中语文阅读考试技巧总汇(一) --针对不同文体的答题方法 一.现代文阅读 现代文阅读解题原则是: 1."以文解题":看分值答题(如果多分值最好标出1.2,怕丢分不妨n+1,但有字数限制的概括题除外): 2.尽量用原句, ...
  • 中考说明文考点解读
    中考语文考点解读(说明文阅读) 说明文是客观地说明事物的一种文体,目的在于给人以知识,或说明事物的状态.性质.功能等方面的特征,或阐述事理.其考点主要有: 1.整体把握文章的大致内容,弄清说明对象. 2.准确抓住说明对象的具体特征. 3.分 ...
  • 什么是工作总结
    什么是工作总结 工作总结是对前段社会实践活动进行全面回顾.检查.分析.评判,从理论认识的高度概括经验 教训,以明确努力方向,指导今后工作的一种机关事务文体.它是党政机关.企事业单位.社会团体都广泛使用的常用文体. 总结的写作过程,既是对自身 ...
  • 语文做题技巧
    中考语文现代文阅读解题技巧与应试策略 一.现代文阅读回答问题时要注意以下几点: 1.回答问题要围绕"中心意思"作答,这也是归纳中心意思的意义所在.很多考生疑惑自己答的内容不少,为什么得不了分,主要原因就在没有围绕中心答题 ...
  • 初中说明文阅读技巧
    中考专题训练之------说明文阅读 一. 说明文的基本知识 (一)说明文的概念:说明文是以说明为主要表达方式的一种文体,介绍事物的状态.性质.功能或阐明事理,目的是给人以知识. (二)说明文与其它文体的区别:议论文以理服人,哲理性是它的主 ...
  • 文献综述格式及技巧范文大全(2格式2技巧4范文)
    文献综述格式及技巧大全(2 格式 2 技 巧 4 范文)第一个文献综述是在对文献进行阅读.选择.比较.分类.分析和综合的基础上,研究者用 自己的语言对某一问题的研究状况进行综合叙述的情报研究成果.文献的搜集.整理.分析 都为文献综述的撰写奠 ...
  • 关于针对尝试校本写作的解释
    HR Planning System Integration and Upgrading Research of A Suzhou Institution 尝试校本写作 引导回归本真 内容摘要:本文从目前初中学生作文普遍存在的问题原因分析入 ...
  • 政务信息写作技巧
    2012-07-30 16:11 来自互联网 第一讲 政务信息概说 一.政务信息的含义 "政务"从字面上理解,就是政府行政事务,其内涵是对人类社会活动的组织和管理.而"信息"则是通过一定的物质载体反映 ...