什么时候使用单例什么时候使用静态类?
2015-09-23 18:35
302 查看
观点一:(单例)
单例模式比静态方法有很多优势:
首先,单例可以继承类,实现接口,而静态类不能(可以集成类,但不能集成实例成员);
其次,单例可以被延迟初始化,静态类一般在第一次加载是初始化;
再次,单例类可以被集成,他的方法可以被覆写;
最后,或许最重要的是,单例类可以被用于多态而无需强迫用户只假定唯一的实例。举个例子,你可能在开始时只写一个配置,但是以后你可能需要支持超过一个配置集,或者可能需要允许用户从外部从外部文件中加载一个配置对象,或者编写自己的。你的代码不需要关注全局的状态,因此你的代码会更加灵活。
观点二:(静态方法)静态方法中产生的对象,会随着静态方法执行完毕而释放掉,而且执行类中的静态方法时,不会实例化静态方法所在的类。如果是用singleton, 产生的那一个唯一的实例,会一直在内存中,不会被GC清除的(原因是静态的属性变量不会被GC清除),除非整个JVM退出了。这个问题我之前也想几天,并且自己写代码来做了个实验。
1. 如果你需要维护一些数据或者状态,那么使用单例模式。静态类实是放一些简单的常量或者无状态的函数,例如技巧篇(http://blog.csdn.net/candycat1992/article/details/24884667#t1)这里的技巧1和技巧2。
2. 从上面的代码里你可以看出来,单例模式使用的类实际上就是一个普通的类。因此你可以把它们当成参数传递给其他脚本。
3. 单例模式可以延迟类的初始化。从代码里你可以看出,只有需要的时候才会实例化那个单例。而静态类在加载的时候就被绑定了。
4. 单例具有很好的面向对象的特性。这句话比较虚,我的理解是它的可变性很大,可以继承可以重载等等等等。
【以上文章摘自多位大神博客】
单例模式比静态方法有很多优势:
首先,单例可以继承类,实现接口,而静态类不能(可以集成类,但不能集成实例成员);
其次,单例可以被延迟初始化,静态类一般在第一次加载是初始化;
再次,单例类可以被集成,他的方法可以被覆写;
最后,或许最重要的是,单例类可以被用于多态而无需强迫用户只假定唯一的实例。举个例子,你可能在开始时只写一个配置,但是以后你可能需要支持超过一个配置集,或者可能需要允许用户从外部从外部文件中加载一个配置对象,或者编写自己的。你的代码不需要关注全局的状态,因此你的代码会更加灵活。
观点二:(静态方法)静态方法中产生的对象,会随着静态方法执行完毕而释放掉,而且执行类中的静态方法时,不会实例化静态方法所在的类。如果是用singleton, 产生的那一个唯一的实例,会一直在内存中,不会被GC清除的(原因是静态的属性变量不会被GC清除),除非整个JVM退出了。这个问题我之前也想几天,并且自己写代码来做了个实验。
1. 如果你需要维护一些数据或者状态,那么使用单例模式。静态类实是放一些简单的常量或者无状态的函数,例如技巧篇(http://blog.csdn.net/candycat1992/article/details/24884667#t1)这里的技巧1和技巧2。
2. 从上面的代码里你可以看出来,单例模式使用的类实际上就是一个普通的类。因此你可以把它们当成参数传递给其他脚本。
3. 单例模式可以延迟类的初始化。从代码里你可以看出,只有需要的时候才会实例化那个单例。而静态类在加载的时候就被绑定了。
4. 单例具有很好的面向对象的特性。这句话比较虚,我的理解是它的可变性很大,可以继承可以重载等等等等。
【以上文章摘自多位大神博客】
相关文章推荐
- getcomponent等等
- LAMP编译介绍二、 php以fpm的方式结合apache工作
- unity C# NGUI控件寻路径方法
- 数莓派kernel building官方文档
- 2015我想和Java聊聊之NIO读写文件
- 单例模式(Singleton)详解
- /res/values 目录详解
- jquery filter()方法
- 字符串系列函数在序列化中的问题
- 测试基础 测试用例
- Ubuntu:su和su -(su - root)的区别
- 测试用例设计白皮书--等价类划分方法
- Android中使用Handler造成内存泄露
- Report View 2008 升级至Report View 2012
- DRUID连接池的使用——为监控而生的DB池[转]
- CYC-非常炫酷的UIView动画-02
- LightOJ 1038 概率期望
- NGUI控件
- mysqldump选项
- android之ScrollView里嵌套ListView(都可滚动)