现在的位置: 首页 > 综合 > 正文

单例模式与纯静态类(各种转) 求解疑!

2012年09月30日 ⁄ 综合 ⁄ 共 1287字 ⁄ 字号 评论关闭

 猫在上次纯使用静态类的情况下 出了很多问题

最明显的就是静态类无法实现多态 无法继承之类的 的确是很麻烦
而且在写判定分数的算法时 添加了很多麻烦 最后还是把它从静态改了回来
特别是调试时 给俺造成了很多麻烦
从那之后  我对"静态"这个东西产生了很大的疑惑 有种敬而远之的感觉
不过静态的确是很有用呐 像接触简单工厂模式时 就是靠它来增加对象的生命周期的
单例模式则是通过它 实现了"计划生育"的功能
不过用纯静态类 其实也是有计划生育的功能的 因为人家根本不用实例化了..
那么来看看它们吧 这里我暂且把静态类放一边 实际上静态类就是限制了它内部的东西都得是静态的东西
我看完后 还是觉得有些小失望 无法多态是早就知道的事了 据说在多线性里很有用 可是这个我还没用过来..
而且 我还产生了一个疑惑
这句:2、静态方法中产生的对象,会随着静态方法执行完毕而释放掉;
实际上我在静态方法中创建的对象 好像是没有被释放的 因为那个对象里 我有写析构函数 可是它始终没有被调用到
怎么说呢 求各种高手指疑
 

转自:http://www.cnblogs.com/effective/archive/2010/06/23/1763328.html

这里暂且把单例模式限定为不是全用静态函数实现的。

1。使用的方便性:如果需要初始化工作,单例模式可以在构造函数里面完成,全静态函数的类需要一个额外的函数来完成初始化工作,而且使用者如果没有调用这个initialize函数,那么后续的操作就会有问题,构造函数会被默认调用,所以使用起来比较简单,对使用者做出了最少的假设。

2。初始化时机:单例模式初始化比较灵活,可以在需要的时候初始化,而全静态函数必然导致成员全为静态成员,静态成员是在编译时就初始化好了。如果初始化成本比较昂贵,并且程序里面未必一定使用这个类,那这将是单例模式的一个很大优势。顺便说一下全局变量,全局变量的初始化顺序是未指定的。

例如 全局变量int a; int b;编译器是先初始化a还是先初始化b?我想大家只能靠猜,或者在某个编译器上实验一下给出答案,一旦要是有个新编译器,结果又会是什么样子呢?

3。最重要的区别:单例模式可以有多态,而全静态的类不能支持多态。

 

转自:http://blog.csdn.net/TangZhongxin/archive/2009/03/2**028126.aspx

 

用单例模式还是用静态方法、静态类:(摘)

1、单例模式比静态方法有很多优势:
单例可以继承类,实现接口;

单例可以被延迟初始化;

单例类可以被集成,他的方法可以被覆写;

单例类可以被用于多态而无需强迫用户只假定唯一的实例,你的代码会更加灵活。

2、静态方法中产生的对象,会随着静态方法执行完毕而释放掉;

执行类中的静态方法时,不会实例化静态方法所在的类;

如果是用singleton, 产生的那一个唯一的实例,会一直在内存中,不会被GC清除的(原因是静态的属性变量不会被GC清除),除非整个JVM退出了。

3、由于DAO等东东的初始化,会比较占系统资源的,如果用静态方法来取,会不断地初始化和释放,所以我个人认为如果不存在比较复杂的事务管理,用singleton会比较好。

 

【上篇】
【下篇】

抱歉!评论已关闭.