单例,多例。各有什么优缺点?

阿诺 2012-12-04 09:59:58
一直没搞明白,单例,多例各有什么优缺点。实际开发者如何取舍!
...全文
3621 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
limit111 2012-12-05
  • 打赏
  • 举报
回复
这个和你的需求有关吧。如果你希望全局只有一个对象,那当然用单例,否则用多例。 另外,除了多例,还有资源池的用法,比如线程池、数据库连接池,它们可以维护指定数量的对象。
老紫竹 2012-12-05
  • 打赏
  • 举报
回复
很多个类似的活,让一个人干和让几个人干,结果都一样,那就用让1个人干好了。
wonkju 2012-12-05
  • 打赏
  • 举报
回复
我觉得单例模式是为了解决多线程的安全的问题。 在考虑到多线程的单例模式中,一来可以防止多线程带来的安全隐患,而来可以一定程度防止死锁的问题。(个人意见)。顶LZ.
炽烈 2012-12-05
  • 打赏
  • 举报
回复
引用 8 楼 anybyb 的回复:
大家都在解释单例是什么!但是多例如果说不好struts2为什么就用多例,而struts1却是单例。必然没有绝对的好于坏,那么他们之间到底有什么区别?什么场景应该怎么用?!求解答啊!
此外,有些情况下过分使用单例也会造成问题。 最典型例子就是Struts1。 我们知道,Struts1的action,是单实例,多线程的。我们知道,一个用户连接上来,都会分配一个新线程。但这些线程,操作的都是“同一个”action对象。每个用户的数据都是不同的,而action却只有一个,这就很容易造成这样的情况:用户A进行了操作,想翻页,页数+1;但同时用户B进行了操作,想翻页,页数-2;最终用户A、用户B都翻页到-1,这都不是用户A、用户B想要的结果。 所以程序员写Struts1的时候,都相当相当小心,都尽量不写成员变量。 Struts2的action就是每个线程一个实例,就不会出现之前那种情况了。 单例的优点: 能保障对象的唯一性; 用于读取配置文件相当合适;(因为配置文件只有一份,也只需要使用这一份); 缺点: 不合理的单例设计将导致程序编写十分麻烦。 不需要保障唯一性的对象使用单例,将会起反作用。
炽烈 2012-12-05
  • 打赏
  • 举报
回复
引用 8 楼 anybyb 的回复:
大家都在解释单例是什么!但是多例如果说不好struts2为什么就用多例,而struts1却是单例。必然没有绝对的好于坏,那么他们之间到底有什么区别?什么场景应该怎么用?!求解答啊!
struts1的单例也是被人诟病之所在……所以struts2才改成多例了。 先说下为什么用单例。 比如说现在有一个txt文档,有很多很多内容。我们需要读取这个txt的内容,就需要解析txt文件。这个解析txt文档需要花费相当相当多的时间。要是每次使用,都来new一个对象,花上数十秒时间来解析这个txt文档,实在没必要。 现在,我们使用单例,就只需要解析一次。把解析之后的txt文档,全放在一个对象里保存,然后把这个对象放到内存。这样每次要读取txt文档内容,只要直接使用那个单例对象就好。 读取配置文件也就相当于读取txt文档,一般都是使用单例来读写配置文档。 除此之外,单例的另一个应用,就是保障对象的唯一性。比如说,财务上有个“总账”,这个数据只能有一份。你要是有多个“总账”,每个“总账”的数据不相同,岂不是乱套了?怎么知道哪个是有效的?
阿诺 2012-12-05
  • 打赏
  • 举报
回复
大家都在解释单例是什么!但是多例如果说不好struts2为什么就用多例,而struts1却是单例。必然没有绝对的好于坏,那么他们之间到底有什么区别?什么场景应该怎么用?!求解答啊!
zhangchao19890805 2012-12-05
  • 打赏
  • 举报
回复
单例模式:有些东西只需要一个对象就可以了,比如工厂模式中的工厂。推荐看一下 《head first 设计模式》这本书
muqingren1978 2012-12-05
  • 打赏
  • 举报
回复
应用场景决定吧
Java_Super_Man 2012-12-05
  • 打赏
  • 举报
回复
单例是代表具有全局性的东西。 两者所使用的作用域不太一样。 找本设计模式,上边有的
xingfuzhuzi1314 2012-12-04
  • 打赏
  • 举报
回复
单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点。 LZ,你可以详情的看看这个链接。 http://www.cnblogs.com/cpetcoandy/archive/2011/11/10/2244407.html

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧