静态类 VS 单例模式

Posted zgq25302111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态类 VS 单例模式相关的知识,希望对你有一定的参考价值。

假定将单例模式限定为不是全用静态函数实现。
1、使用的方便性:如果需要初始化工作,单例模式可以在构造函数里面完成,全静态函数的类需要一个额外的函数来完成初始化工作,而且使用者如果没有调用 initialize 函数,那么后续的操作就会有问题。而构造函数会被默认调用,所以使用起来比较简单,对使用者做出了最少的假设。
2、初始化时机:单例模式初始化比较灵活,可以在需要的时候初始化,而全静态函数必然导致成员全为静态成员,静态成员是在编译时就初始化好了。如果初始化成本比较昂贵,并且程序里面未必一定使用这个类,那这将是单例模式的一个很大优势。顺便说一下全局变量,全局变量的初始化顺序是未指定的。
例如 全局变量int a; int b;编译器是先初始化a还是先初始化b?我想大家只能靠猜,或者在某个编译器上实验一下给出答案,一旦要是有个新编译器,结果又会是什么样子呢?
3、最重要的区别:单例模式可以有多态,而全静态的类不能支持多态。

 

单例模式比静态方法有很多优势:
首先,单例可以继承类,实现接口,而静态类不能(可以集成类,但不能集成实例成员);
其次,单例类可以被集成,方法可以被覆写。

 

ref:https://www.cnblogs.com/phoebus0501/archive/2011/03/12/1982408.html

以上是关于静态类 VS 单例模式的主要内容,如果未能解决你的问题,请参考以下文章

java基础-单例设计模式

java基础-单例设计模式

死磕GOF23之单例模式

Java中单例模式和静态类的区别

单例模式(懒汉模式-双检锁饿汉模式静态内部类模式)-详细

单例模式(懒汉模式-双检锁饿汉模式静态内部类模式)-详细