singleton vs static 我也问个问题,singleton 相对于一个全是static方法的是否有任何优势呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 两个都是给应用程序提供一份单独的数据拷贝,两个都有点违背OO的精神,可是却往往在实际应用中使用到。1. singleton有getInstance方法,static类没有, singleton用于表达一些配置、hold一些应用启动以后仍然会变更的数据2. static一般来说hold一些应用启动以后不会变更的数据 嗯,我个人也感觉使用起来没啥区别。也许单例getinstance时可以做些引用计数之类的功能。看看还有没有其他的说法。 同意,static的本质是直接在内存中开辟空间使用,而单例是手动(new)开辟空间。 OK, 我再阐述一下我的问题。现在我要实现一个功能类,其中也可能要维护一些配置。现在有两个选择:a)把这些功能做成实例方法,然后做一个singelton来使用。b)把这些方法都做成static的,配置也用static成员存储,然后直接使用这些static方法。a和b比起来究竟有没有什么更多的优点呢?我见到很多人都是用singleton来做这样的事情,不禁有此一问,在我个人的认识中确如5楼朋友所说,是先迈左脚还是先迈右脚的问题。 楼上的都说得很清楚了,我也没什么说的了。两个的范畴都不一样,静态方法存在于类中,是没有对象的。单例模式中,其他对象都是使用的唯一对象,是与对象有关的。举个例子,一个Person类,有一个static eat() 方法。就是所有的人类都有eat(),与类有关,与对象无关;singlelon中,只的是某一具体的人有eat(),与对象有关,与类无关。 使用 static 和 非static 是一个话题是否使用 singlelon 又是一个话题有必要混在一起谈吗?使用static 无非是看操作是否具备状态,是否仅局限于一些工具方法,而且还要考虑到你自己的代码设计。static 淡化了对象的概念,感觉像C的友元函数。我也听说过通过static加速函数的执行速度,这个和c的online的意味也有点相似。但总的来说 static淡化了对象,可能存在破坏设计的可能,需要慎用。singlelon 使用只要考虑其被使用的生命周期中对象的唯一性,至于对象是否有状态或无状态也是跟具体需求有关。并不会像 static ,生命周期是从classload load到 jvm结束。过分的使用static 来达到类似 singlelon的效果会很破坏自己的设计风格,当然了前提是你的设计是采用oo的方式,如果你就是喜欢像C一样,面向方法编程,除了数据对象,就是方法,这种情况除外。 一般而言,尽量避免使用 singlelon, 因为你要senlelon了的时候,往往是因为你不知道这个对象到底应该被谁所有,所以就singlelon, 谁要用自己来取吧。 是个职责分配没有明确的问题。 当然也有某些对象它确实不应该属于某个Object, 且只能有一个,就senlelon.Static一般用在工具类中,或是从逻辑语义上理解,某个方法就是属于“类级”的。就具体使用中的不同而言,我觉得:singlelon的那个对象是可以被垃圾回收的(没有任何引用,加个方法把那个static的本类持有的引用也去掉),而static的"属性"是不可能被垃圾回收的,除非你一个一个手动处理。 关于张孝祥老师的一道习题 怎样调整JTREE节点的顺序 请问如何把 SimpleThread.java中的所有线程修改成后台线程。 在线等。 G729/G723.1编码后的声音文件,用什么软件可以播放? 请问Java在Web应用编程时怎样调试? 这样一个简单程序我用Java写行不? Swing 能渲染HTML内容吗 关于读取连接数据库属性文件的问题 弱智问题~~~ java中的小疑惑 如何记录一个树根节点到子节点的路径 - -请问能不能用代码实现点击事件
2. static一般来说hold一些应用启动以后不会变更的数据
也许单例getinstance时可以做些引用计数之类的功能。
看看还有没有其他的说法。
同意,static的本质是直接在内存中开辟空间使用,而单例是手动(new)开辟空间。
OK, 我再阐述一下我的问题。
现在我要实现一个功能类,其中也可能要维护一些配置。
现在有两个选择:
a)把这些功能做成实例方法,然后做一个singelton来使用。
b)把这些方法都做成static的,配置也用static成员存储,然后直接使用这些static方法。
a和b比起来究竟有没有什么更多的优点呢?我见到很多人都是用singleton来做这样的事情,不禁有此一问,在我个人的认识中确如5楼朋友所说,是先迈左脚还是先迈右脚的问题。
两个的范畴都不一样,静态方法存在于类中,是没有对象的。
单例模式中,其他对象都是使用的唯一对象,是与对象有关的。
举个例子,一个Person类,有一个static eat() 方法。就是所有的人类都有eat(),与类有关,与对象无关;
singlelon中,只的是某一具体的人有eat(),与对象有关,与类无关。
static 淡化了对象的概念,感觉像C的友元函数。我也听说过通过static加速函数的执行速度,这个和c的online的意味也有点相似。但总的来说 static淡化了对象,可能存在破坏设计的可能,需要慎用。singlelon 使用只要考虑其被使用的生命周期中对象的唯一性,至于对象是否有状态或无状态也是跟具体需求有关。并不会像 static ,生命周期是从classload load到 jvm结束。过分的使用static 来达到类似 singlelon的效果会很破坏自己的设计风格,当然了前提是你的设计是采用oo的方式,如果你就是喜欢像C一样,面向方法编程,除了数据对象,就是方法,这种情况除外。
Static一般用在工具类中,或是从逻辑语义上理解,某个方法就是属于“类级”的。
就具体使用中的不同而言,我觉得:singlelon的那个对象是可以被垃圾回收的(没有任何引用,加个方法把那个static的本类持有的引用也去掉),而static的"属性"是不可能被垃圾回收的,除非你一个一个手动处理。