论坛首页 Java企业应用论坛

为什么需要Singleton

浏览 48042 次
该帖已经被评为良好帖
作者 正文
   发表时间:2009-06-07  
类的属性是全局的,系统一启动就已经在全局静态数据区分配好了资源,而单例是对象,只有在需要的时候才在堆内分配资源来放置实例属性。从封装的角度或者资源占用的角度来看 ,单例可能会更好一些。
0 请登录后投票
   发表时间:2009-06-07  
qzzlw 写道
类的属性是全局的,系统一启动就已经在全局静态数据区分配好了资源,而单例是对象,只有在需要的时候才在堆内分配资源来放置实例属性。从封装的角度或者资源占用的角度来看 ,单例可能会更好一些。


类不是在系统一启动时就加载,而是在第一次引用,或实例化时进行加载
还有另一种方法加载类
Class.forName("XXX");
反而对象的初始化要先加载类,
再进行实例化。
所以我觉得从资源占用的角度来看 ,类反而要好一些。

至于封装,也可以通过私有静态属性来封装类状态,
我觉得这也不是问题



0 请登录后投票
   发表时间:2009-06-07  
dennis_zane 写道
楼主,你说的其实没问题,单例就是一个全局访问点,用全部是静态变量和静态方法的类来做同样可以。我看过这样的讨论,最后的结论是单例模式比之全静态类来说唯一的好处就是,你可以很容易将单例改成多实例,这个理由很薄弱。


支持这个观点,不过这个理由确实有点薄弱,呵呵
0 请登录后投票
   发表时间:2009-06-07  
步行者 写道
fjlyxx 写道

将类定义为final吧

为什么要将类定义为 final 呢
即使被其他类继承 ,它的状态还是唯一的
它的子类可以使用父类的静态方法和静态属性
,却不会在内存中创造一份父类静态方法和静态
属性的的拷贝,
类的状态是唯一的,不能通过继承复制它,只能
通过特定接口访问它


呵呵,这是态度问题..其实没区别... 这个和写 class test和 class Test一样的道理. 规范.
一个是cannot subclass the final class
另一个是
Implicit super constructor   is not visible for default constructor. Must define an explicit constructor
0 请登录后投票
   发表时间:2009-06-07  
fjlyxx 写道
步行者 写道
fjlyxx 写道

将类定义为final吧

为什么要将类定义为 final 呢
即使被其他类继承 ,它的状态还是唯一的
它的子类可以使用父类的静态方法和静态属性
,却不会在内存中创造一份父类静态方法和静态
属性的的拷贝,
类的状态是唯一的,不能通过继承复制它,只能
通过特定接口访问它


呵呵,这是态度问题..其实没区别... 这个和写 class test和 class Test一样的道理. 规范.
一个是cannot subclass the final class
另一个是
Implicit super constructor   is not visible for default constructor. Must define an explicit constructor


呵呵 采纳意见。
不final 确实肯能会引起混淆,而且子类也可以实例化对象


0 请登录后投票
   发表时间:2009-06-07  
这帖子都有人投隐藏??

JE搞什么啊,投个良好冲下
0 请登录后投票
   发表时间:2009-06-07  
seraphim871211 写道
这帖子都有人投隐藏??

JE搞什么啊,投个良好冲下

其实我想给你良好 但我没那个能力
至于为什么都是单实例 我感觉不一定都是那样 你是不是看了 spring的配置的都是单实例呢
0 请登录后投票
   发表时间:2009-06-08  
谢谢大家对这个帖子的关注

对于一个设计模式 我的理解它就像一个经典招式
那么我们是不是掌握了一些经典招式后就能独步武林了呢
我不知道 反正我还没有充分驾驭这些招式
但我想一个武林高手 要做到百战百胜 必定知己知彼

我们需要了解这些设计模式,但我们也要充分思考这些模式,
到底这些模式 背后 隐藏着什么样的动机,在什么情况下运用
才能发挥它的作用。

以前对模式的运用让我产生过一些困惑,模式带来的灵活度与
复杂度怎么来权衡,滥用模式只会增加系统的复杂性与维护成本,
那么权衡的标准又是什么, 我想是来源于经验和需求。

希望大家通过这个帖子也能得到小小启发。。



0 请登录后投票
   发表时间:2009-06-08  
接口这个关,就过不了
0 请登录后投票
   发表时间:2009-06-08   最后修改:2009-06-08
我觉得单例的一个好处,应该是可以使用父类,也就是继承。它可以继承父类的protected以上级别的属性跟方法,如果使用静态类,你想用这些东西,你就把要用到的方法全部都扔到这个类里面来,我不知道我的理解是否正确,提个观点大家讨论一下!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics