静态与单例 转载

很多时候,单例、静态类的区别和使用场景一直纠缠不清,也比较容易混淆,我整理分析了一下,现将相关区别、联系与使用场景做如下描述:

 

§ 单例

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、内存占用,两者相同

posted on 2017-02-25 15:35  寡人为你打下的江山  阅读(294)  评论(0编辑  收藏  举报

导航