JiveJdon Community Forums
在线300人 Home | 论坛 | 培训咨询 | 精华 | 查搜 | 注册 | 登陆 |
首页 » 论坛 » 设计模式、框架和架构
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表
???en_US.forumThreadNext.name??? 下一主题
这个主题共有 2 回复 / 1 页 [ ]  发表新帖子  回复该主题贴
ejb3no1

发表文章: 1
注册时间: 2008年01月24日 14:33
给他发消息
大家看板桥写的Java设计模式,难道没有发现问题吗? 发表: 2008年01月24日 15:09 回复
在板桥的“设计模式”教程中写到:

一般Singleton模式通常有几种形式:
public class Singleton {
  private Singleton(){}
  //在自己内部定义自己一个实例,是不是很奇怪?
  //注意这是private 只供内部调用
  private static Singleton instance = new Singleton();
  //这里提供了一个供外部访问本class的静态方法,可以直接访问  
  public static Singleton getInstance() {
    return instance;   
   }
}

第二种形式:

public class Singleton {
  private static Singleton instance = null;
  public static synchronized Singleton getInstance() {
  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     
  //使用时生成实例,提高了效率!
  if (instance==null)
    instance=new Singleton();
  return instance;   }

}

本来没有什么问题,可对板桥写的下面这段注释可为不解:
  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     
  //使用时生成实例,提高了效率!
----------------------------------------------
这不是自打嘴巴吗?Singleton模式的作用就是以单实例被使用,板桥写的“不用每次都进行生成对象”,不是很矛盾吗?照板桥这么说第一种形式每次都进行生成对象,那还谈何Singleton?
wlmouse

发表文章: 116
注册时间: 2006年11月09日 15:58
给他发消息
re:大家看板桥写的Java设计模式,难道没有发现问题吗? 发表: 2008年01月24日 17:54 回复
我想应该是笔误。本来的意思是说不用每次在程序启动的时候实例化。如果大量单例在启动的时候实例化有可能影响启动速度。
审校不严的结果。写多了难免有这种问题,很多书上都或多或少出现。请加强对文章的审校,以避免此类低级错误。
banq

发表文章: 9114
注册时间: 2002年08月03日 17:08
给他发消息
回复:大家看板桥写的Java设计模式,难道没有发现问题吗? 发表: 2008年01月25日 16:28 回复
多谢楼主意见,这个问题已经早就更改,注意本站最新更新,写这里本想说明一下Double-checked locking 的问题,后来因为Double-checked 太复杂,就放弃,而且singleton是一种反模式,非常危险,虽然最好学,但是不能常用。
[该贴被banq于2008-01-25 16:32修改过]
这个主题有 2 回复 / 1 页 [ ]
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表    返回页首  返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Spring Struts
查询本论坛内 回复超过的热门帖子
快速发表回复
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com

anti spam