单例运用的范围

单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此有些设计大师并把把其称为设计模式之一。

这里又不具体讲如何实现单例模式和介绍其原理(因为这方便的已经有太多的好文章介绍了),如果对单例模式不了解的可以先看下:http://terrylee.cnblogs.com/archive/2005/12/09/293509.html 。当然也可以自己搜索

好多没怎么使用过的人可能会想,单例模式感觉不怎么用到,实际的应用场景有哪些呢?以下,我将列出一些就在咱们周边和很有意义的单例应用场景。

1. Windows的Task Manager(任务管理器)就是很典型的单例模式(这个很熟悉吧),想想看,是不是呢,你能打开两个windows task manager吗? 不信你自己试试看哦~ 

2. windows的Recycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。

3. 网站的计数器,一般也是采用单例模式实现,否则难以同步。

4. 应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。

5. Web应用的配置对象的读取,一般也应用单例模式,这个是由于配置文件是共享的资源。

6. 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。

7. 多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。

8. 操作系统的文件系统,也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。

9. HttpApplication 也是单位例的典型应用。熟悉ASP.Net(IIS)的整个请求生命周期的人应该知道HttpApplication也是单例模式,所有的HttpModule都共享一个HttpApplication实例.

 

总结以上,不难看出:

  单例模式应用的场景一般发现在以下条件下:

  (1)资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如上述中的日志文件,应用配置。

  (2)控制资源的情况下,方便资源之间的互相通信。如线程池等。

大家可以追加其他常见的应用场景哈~~非常欢迎~~


作者:Jason Cai
出处:http://www.cnblogs.com/BrainDeveloper/


#1楼   2013-07-16 08:48  Treenew Lyn   
单例模式不简单,如果考虑到懒加载、线程、同步、刷新等……
http://pic.cnitblog.com/face/u98297.png?id=21153553
  
#2楼 [ 楼主2013-07-16 09:04  Jason Cai   
@Treenew Lyn
你说的这些无非就是多线程的异步(或者说是线程安全)方面而已,在.Net或Java这类高级语言里都有现成的锁可以直接运用。
http://pic.cnitblog.com/face/280018/20130714015913.png
  
#3楼   2013-07-16 10:34  卓酷   
Task Manager(任务管理器)可以同时打开两个以上,我曾偶然遇到过,当时有一台极端龟速的机器需要处理,于是在任务栏空白处点右键,选择“任务管理器”,但没反应,于是继续不停地点右键选“任务管理器”,过了好一会终于有反应了,但奇迹也出现了,Task Manager(任务管理器)竟然同时打开了好几个。
http://pic.cnitblog.com/face/u359171.jpg?id=08093534
  
 
#5楼 [ 楼主2013-07-16 21:46  Jason Cai   
@卓酷
我估计是当时你电脑卡,显示出错导致的。(就是任务管理器换位置了,但是原来位置的还没来得急消失)。
http://pic.cnitblog.com/face/280018/20130714015913.png
  
#6楼   2013-07-18 11:05  卓酷   
@Jason Cai
引用 @卓酷
我估计是当时你电脑卡,显示出错导致的。(就是任务管理器换位置了,但是原来位置的还没来得急消失)。

不是显示出错导致的,而是真的同时运行了好几个,每个都可点击操作,最后关闭的时候,也是一个一个点击关闭按扭关掉的。估计应该是系统太过缓慢,管理器在启动的时候检测是否已有实例启动上出问题了,应该是实例启动标志没有获取足够资源建立起来,然后连续的启动任务管理器时,在检测实例标识时没检测到就继续启动了。
http://pic.cnitblog.com/face/u359171.jpg?id=08093534
  
#7楼 [ 楼主2013-07-19 15:09  Jason Cai   
@卓酷
@卓酷
引用 @Jason Cai
引用引用@卓酷
我估计是当时你电脑卡,显示出错导致的。(就是任务管理器换位置了,但是原来位置的还没来得急消失)。

不是显示出错导致的,而是真的同时运行了好几个,每个都可点击操作,最后关闭的时候,也是一个一个点击关闭按扭关掉的。估计应该是系统太过缓慢,管理器在启动的时候检测是否已有实例启动上出问题了,应该是实例启动标志没有获取足够资源建立起来,然后连续的启动任务管理器时,在检测实例标识时没检测到就继续启动了。

呵呵,还当时真应该截图当作纪念啊
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值