设计模式(二)单例模式Singleton(创建型)
2015-04-07 22:20
183 查看
几乎所有面向对象的程序中,总有一些类的对象需要是唯一的,例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销。再如大家最经常用的IM,如QQ,在同一台电脑,一个帐号只能有唯一的登录。
1. 问题
怎样确保一个特殊类的实例是独一无二的(它是这个类的唯一实例),并且这个实例易于被访问呢?
2. 解决方案
1)全局变量:一个全局变量使得一个对象可以被访问,但它不能防止你实例化多个对象。因为你的任何代码都能修改全局变量,这将不可避免的引起更多调试的意外。换句话说,全局变量的状态总是会出现一些问题的。
2)类构造函数私有和类自身的静态方法:让类自身负责保存它的唯一实例(静态变量)。这个类可以保证没有其他实例可以被创建(通过截取创建新对象的请求) ,并且它可以提供一个访问该实例的方法(静态方法)。这就是Singleton模式。
3. 适用性
在下面的情况下可以使用单件模式
1)当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
2)当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
4. 实现:
1. 问题
怎样确保一个特殊类的实例是独一无二的(它是这个类的唯一实例),并且这个实例易于被访问呢?
2. 解决方案
1)全局变量:一个全局变量使得一个对象可以被访问,但它不能防止你实例化多个对象。因为你的任何代码都能修改全局变量,这将不可避免的引起更多调试的意外。换句话说,全局变量的状态总是会出现一些问题的。
2)类构造函数私有和类自身的静态方法:让类自身负责保存它的唯一实例(静态变量)。这个类可以保证没有其他实例可以被创建(通过截取创建新对象的请求) ,并且它可以提供一个访问该实例的方法(静态方法)。这就是Singleton模式。
3. 适用性
在下面的情况下可以使用单件模式
1)当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
2)当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
4. 实现:
相关文章推荐
- 设计模式杂谈:创建型模式之单件模式(Singleton)
- 设计模式单件(Singleton)---对象创建型模式
- (C++)设计模式------单例模式 singleton(简单的实现和对象释放的控制) -- 创建型模式
- 【设计模式攻略】创建型模式之Singleton模式(也谈勿滥用Singleton)
- 设计模式--创建型-SINGLETON(单件)
- [导入]C#面向对象设计模式纵横谈(2):Singleton 单件(创建型模式).zip(9.57 MB)
- PHP设计模式:创建型之单例(Singleton)
- [设计模式-创建型]单态(Singleton)
- JAVA设计模式(03):创建型-单例模式(Singleton)
- C#面向对象设计模式纵横谈(2):Singleton 单件(创建型模式) 笔记
- 创建型设计模式---JAVA Singleton模式(单身模式)
- C#面向对象设计模式学习笔记(1) - Singleton 单件模式(创建型模式)
- 创建型设计模式---JAVA Singleton模式(单身模式)
- 设计模式 3.5 Singleton(单件)-对象创建型模式
- 设计模式笔记--创建型模式之五--单件 Singleton
- 面向对象设计模式学习(二):Singleton单件创建型模式
- 几种创建型的设计模式概析【上】——Factory模式, AbstractFactory模式,Singleton模式【C++实现】
- 设计模式学习之单例模式(Singleton,创建型模式)(4)
- 【设计模式基础】创建型模式 - 1 - 单件(Singleton)
- [整理]C#面向对象设计模式纵横谈(2):Singleton单件(创建型模式)