Singleton 单件模式 (创建型模式)

课程要点:

1、模式的职能分类。
Creational Patterns:To create objects;
Structural Patterns:Deal with relationships between classes and objects;
Behavioral Patterns:隔离变化,为类与对象交互中的职责分配。

2、模式的范围分类。
Class Patterns
Objects Patterns

3、Motivation 动机
保证该类在系统中只存在一个实例,才能保证其逻辑正确以及良好效率。
这应该是类设计者的责任,而不是使用者的责任。

4、Intent 意图
保证一个类仅有一个实例,并提供一个该实例的全局访问点。   ---GoF

5、Structure 结构


6、单线程Singleton Patterns 的实现
      私有构造函数+私有静态成员+公有静态只读属性 
                  |                                                           |
 (不能随便“牛”了^_^)                             (get{If null {私有静态成员=new 私有构造函数;}return 私有静态成员})
几个要点:不能支持ICloneable接口;不要支持序列化。。

7、多线程环境下Singleton Patterns的实现.
volatile关键字保证不会出现编辑器对指令重新排序造成的严格意义的多线程环境下多实例的产生.
利用辅助器做double check,防止多现程访问造成的对象不唯一.

8、C#下独特的实现方式
公有静态只读字段+私有构造函数
内联初始化   静态构造器的免费加锁。
适用于构造器无参的方法。

9、Singleton模式的扩展
1 to n:对象池的实现。
将new构造器的调用转移到其他类中。
Singleton模式的核心:如何控制用户使用“牛”对一个类的实例构造器的任意调用。

10、Type本身内部的实现,是对Singleton模式的一个扩展应用。
HttpContext.Current 在局部领域的一个Singleton模式的扩展实现。