博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

  单例模式是23种设计模式中最常用的模式之一。单模式屏蔽了对象的初始化,可以很方便地获取对象而不用每次都去初始化它。由于易用且好用,在很多情况下都会来一个单例模式的类。本文要强调的是,虽然好用,单例模式绝不能滥用。在使用的时候,还需要仔细地斟酌。

  1. 单例模式是缓存的表现形式之一。

  单一对象一旦初始化后,将会在程序运行过程中长驻内存。既然属于缓存,那么就需要考虑,哪些对象是需要缓存,而哪些对象不需要。毕竟系统的资源是有限的,不可能对所有的内容都进行缓存。如果对象不是使用得太频繁,就需要考虑,缓存这样的对象值不值得。

  2. 如果使用了单例模式,就意味着,其它模块对这个模块的引用总是1,而无法达到1对多或多对多的引用,也就是说,对象的使用受到了限制。而调用者只能反复使用这一个对象,你能保证对象随时都处于一可预定的状态吗?如果不能,那就不要使用单例模式。如果对象是无状态的,就比较合适提供为单例模式。从系统的扩展方面来考虑,如果需要反复使用一个对象,应该提供另外一个Provider类或Cache类,在这个类中,缓存某个对象,并为外界提供访问这个对象的接口。

  3. 单例模式限制了对对象的扩展。一个被设计成单例模式的类如果扩展?恐怕比较别扭。我的经验是,一个应用程序或框架中,除了以下几种角色的类外,应该避免使用单例类。

  •  提供数据的辅助类
  •  使用频繁并且是无状态,不需要同步的类
  •  创建对象的类,如Provider、Cache、Builder、Factory这些类
  •  配置操作类




posted on 2010-07-16 23:00  黑米  阅读(766)  评论(1编辑  收藏  举报