猫在上次纯使用静态类的情况下 出了很多问题
转自: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会比较好。