我也问个问题,singleton 相对于一个全是static方法的是否有任何优势呢?

解决方案 »

  1.   

    两个都是给应用程序提供一份单独的数据拷贝,两个都有点违背OO的精神,可是却往往在实际应用中使用到。1. singleton有getInstance方法,static类没有, singleton用于表达一些配置、hold一些应用启动以后仍然会变更的数据
    2. static一般来说hold一些应用启动以后不会变更的数据
      

  2.   

    嗯,我个人也感觉使用起来没啥区别。
    也许单例getinstance时可以做些引用计数之类的功能。
    看看还有没有其他的说法。
      

  3.   


    同意,static的本质是直接在内存中开辟空间使用,而单例是手动(new)开辟空间。
      

  4.   


    OK, 我再阐述一下我的问题。
    现在我要实现一个功能类,其中也可能要维护一些配置。
    现在有两个选择:
    a)把这些功能做成实例方法,然后做一个singelton来使用。
    b)把这些方法都做成static的,配置也用static成员存储,然后直接使用这些static方法。
    a和b比起来究竟有没有什么更多的优点呢?我见到很多人都是用singleton来做这样的事情,不禁有此一问,在我个人的认识中确如5楼朋友所说,是先迈左脚还是先迈右脚的问题。
      

  5.   

    楼上的都说得很清楚了,我也没什么说的了。
    两个的范畴都不一样,静态方法存在于类中,是没有对象的。
    单例模式中,其他对象都是使用的唯一对象,是与对象有关的。
    举个例子,一个Person类,有一个static eat() 方法。就是所有的人类都有eat(),与类有关,与对象无关;
    singlelon中,只的是某一具体的人有eat(),与对象有关,与类无关。
      

  6.   

    使用 static 和 非static 是一个话题是否使用 singlelon 又是一个话题有必要混在一起谈吗?使用static 无非是看操作是否具备状态,是否仅局限于一些工具方法,而且还要考虑到你自己的代码设计。
    static 淡化了对象的概念,感觉像C的友元函数。我也听说过通过static加速函数的执行速度,这个和c的online的意味也有点相似。但总的来说 static淡化了对象,可能存在破坏设计的可能,需要慎用。singlelon 使用只要考虑其被使用的生命周期中对象的唯一性,至于对象是否有状态或无状态也是跟具体需求有关。并不会像 static ,生命周期是从classload load到 jvm结束。过分的使用static 来达到类似 singlelon的效果会很破坏自己的设计风格,当然了前提是你的设计是采用oo的方式,如果你就是喜欢像C一样,面向方法编程,除了数据对象,就是方法,这种情况除外。
      

  7.   

    一般而言,尽量避免使用 singlelon, 因为你要senlelon了的时候,往往是因为你不知道这个对象到底应该被谁所有,所以就singlelon, 谁要用自己来取吧。  是个职责分配没有明确的问题。 当然也有某些对象它确实不应该属于某个Object, 且只能有一个,就senlelon.
    Static一般用在工具类中,或是从逻辑语义上理解,某个方法就是属于“类级”的。
    就具体使用中的不同而言,我觉得:singlelon的那个对象是可以被垃圾回收的(没有任何引用,加个方法把那个static的本类持有的引用也去掉),而static的"属性"是不可能被垃圾回收的,除非你一个一个手动处理。