很多时候,单例、静态类的区别和使用场景一直纠缠不清,也比较容易混淆,我整理分析了一下,现将相关区别、联系与使用场景做如下描述:
§ 单例
1、单例可以继承类,实现接口,体现OOP思想
2、单例可以被延迟初始化
3、单例类可以被集成,它的方法可以被覆写;也就是可以多态
4、垃圾回收:产生的唯一实例会一直驻留在内存中
5、使用场景:
(1)不存在比较复杂的事务管理,用单例比较好,eg:DAO初始化比较占系统资源的,如果用静态类方法来取,会不断地初始化和释放
(2)记录系统日志
(3)当要控制某个类在内存中实例个数只能有一个时
(4)只能多线程使用,那么多线程中实例变量就是多线程共享的,eg:windows的任务管理器,整个windows只需要一个实例
(5)在应用程序中,服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。
这种方式简化了在复杂环境下的配置管理。管理过程中,一些中间耗时检测过程不用重复执行,带来响应速度的优化。
不是必须这样,用普通类也一样实现,每次应用前实例化,用完销毁,相对来说性能差一些而已
§ 静态类
1、静态类不能继承类,实现接口,静态类是密封类,结构化编程时代的概念
2、静态类在第一次加载时初始化
3、垃圾回收:随着静态方法的执行完毕而及时回收
4、类可以有一个静态构造函数,但没有实例构造函数
5、使用场景:
(1)工具集HELPER
(2)使用静态类成员变量维护一个状态,使得可以让多实例共享这个变量,eg:统计使用
(3)可以用它来实现一些类似缓存的功能
§ 相似点
1、内存占用,两者相同
原文:http://www.cnblogs.com/ljyblogs/p/6441946.html