转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> JAVA开发 >> 正文
Java模式设计之单例模式(四)         ★★★★

Java模式设计之单例模式(四)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:869 更新时间:2009/4/22 23:27:51
 不完全的单例类

  什么是不完全的单例类

  估计有些读者见过下面这样的“不完全”的单例类。

  代码清单10:“不完全”单例类


  上面的代码乍看起来是一个“懒汉”式单例类,仔细一看,发现有一个公开的构造子。由于外界可以使用构造子创建出任意多个此类的实例,这违背了单例类只能有一个(或有限个)实例的特性,因此这个类不是完全的单例类。这种情况有时会出现,比如javax.swing.TimerQueue 便是一例,关于这个类,请参见《Java与模式》一书中的“观察者模式与Swing 定时器” 一章。

  造成这种情况出现的原因有以下几种可能:

  (1) 初学者的错误。许多初学者没有认识到单例类的构造子不能是公开的,因此犯下这个错误。有些初学Java 语言的学员甚至不知道一个Java 类的构造子可以不是公开的。在 这种情况下,设计师可能会通过自我约束,也就是说不去调用构造子的办法,将这个不完全的单例类在使用中作为一个单例类使用。

  在这种情况下,一个简单的矫正办法,就是将公开的构造子改为私有的构造子。

  (2) 当初出于考虑不周,将一个类设计成为单例类,后来发现此类应当有多于一个的实例。为了弥补错误, 干脆将构造子改为公开的,以便在需要多于一个的实例时, 可以随时调用构造子创建新的实例。要纠正这种情况较为困难,必须根据具体情况做出改进的决定。如果一个类在最初被设计成为单例类,但后来发现实际上此类应当有有限多个实例,这时候应当考虑是否将单例类改为多例类(Multiton)。

  (3)设计师的Java 知识很好,而且也知道单例模式的正确使用方法,但是还是有意使用这种不完全的单例模式,因为他意在使用一种“改良”的单例模式。这时候, 除去共有的构造子不符合单例模式的要求之外,这个类必须是很好的单例模式。

  默认实例模式

  有些设计师将这种不完全的单例模式叫做“默认实例模式”(Default Instance Pattern)。在所谓的“ 默认实例模式”里面, 一个类提供静态的方法,如同单例模式一样, 同时又提供一个公开的构造子,如同普通的类一样。

  这样做的惟一好处是,这种模式允许客户端选择如何将类实例化:创建新的自己独有的实例,或者使用共享的实例。这样一来,由于没有任何的强制性措施,客户端的选择不一定是合理的选择。其结果是设计师往往不会花费时间在如何提供最好的选择上,而是不恰当地将这种选择交给客户端的程序员,这样必然会导致不理想的设计和欠考虑的实现。

  本文建议读者不要这样做。


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台