C# 设计模式学习二 Singleton单例模式

来源:互联网 发布:下载超牛数据恢复软件 编辑:程序博客网 时间:2024/06/06 19:28

一,模式分类

目的
1,创建型 Creational模式 负责对象创建
2,结构型 Structural模式 处理类与对象间的组合
3,行为型 Behavior 模式  类与对象交互中的职责分配

范围来看

1,类模式处理类与子类的静态关系
2,对象模式处理对象间的动态关系


二,Singleton模式

1,动机Motivation
   在软件系统中 有一些特殊类,必须保证他们在系统中只有一个存在(只有一个实例)才能保证他们的逻辑正确性,以及良好的效率
  
   这种动机是类的设计者的责任(由设计类的人保证),而不是使用者的责任
  
   如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例
  
2,意图
   保证一类只有一个实例,并提供一全局访问点
  
  
三,Singleton模式的几个要点

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

2,Singleton模式不需要支持Icloneable接口(该接口用于克隆),会导致多个对象实例

3,一般不要支持序列化,同上(序列化的方式也可以创建对象)

4,只考虑了对象创建管理,没有考虑对象销毁的管理。因为开销较小(仅有一个),所以没有必要对其销毁进行特殊的管理。

5,不能应用多线程环境,在多线程环境中,使用Singleton模式任然有可能得到多个实例对象。


四,Singleton模式的扩展

1,将一个实例扩展到n个实例,例如对象池的实现
   n并不是任意,而是可控制的范围,
   如,建立一个服务队列,在初始化的过程中用new构造出n个对象,再轮询调用

2,将new构造器的调用转移到其他类中,例如多个类协同工作环境中,某个局部环境只需要拥有一个类的一个实例

3,理解和扩展Singleton模式的核心是:“如何控制用户使用new对一个类的实例构造器的任意调用”  
   即使很好的控制new,new太自由

 

五,实例

1,单线程Singleton模式

 

 

 

2,多线程Singleton模式

 

 

3,更好的Singleton模式的实现(多线程对应)

 

 

 

4,其他实例

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击