ADeveloperH Blog

Meet a better self !

Android 周边技术分享


单例和静态方法的比较

1 参考资料

单例模式和静态方法

单例方法和静态方法的区别

单例模式与静态方法的比较

Android 工具类的两种写法—单例模式与静态方法

2 区别与联系

  • 什么时候用静态方法,什么时候使用非静态方法?

静态方法和实例化方式的区分是为了解决模式的问题,如果我们考虑不需要继承和多态的时候,就可以使用静态方法,但就算不考虑继承和多态,就一概使用静态方法也不是好的编程思想。 如果一个方法和他所在类的实例对象无关,那么它就应该是静态的,否则就应该是非静态。因此像工具类,一般都是静态的。

  • 为什么使用单例模式而不用静态方法?

从面向对象的角度讲: 虽然都能实现目的,但是他们一个是基于对象,一个是面向对象的,就像我们不面相对象也能解决问题一样,面向对象的代码提供一个更好的编程思想。

如果一个方法和他所在类的实例对象无关,那么它就应该是静态的,反之他就应该是非静态的。如果我们确实应该使用非静态的方法,但是在创建类时又确实只需要维护一份实例时,就需要用单例模式了。

比如说我们在系统运行时候,就需要加载一些配置和属性,这些配置和属性是一定存在了,又是公共的,同时需要在整个生命周期中都存在,所以只需要一份就行,这个时候如果需要我再需要的时候new一个,再给他分配值,显然是浪费内存并且再赋值没什么意义,所以这个时候我们就需要单例模式或静态方法去维持一份且仅这一份拷贝,但此时这些配置和属性又是通过面向对象的编码方式得到的,我们就应该使用单例模式,或者不是面向对象的,但他本身的属性应该是面对对象的,我们使用静态方法虽然能同样解决问题,但是最好的解决方案也应该是使用单例模式。

从功能上讲:单例模式可以控制单例数量;可以进行有意义的派生;对实例的创建有更自由的控制;

最近的文章

路由的使用及原理

1 参考资料我所理解的Android模块化(二)——模块通信和模块间服务调用考拉Android客户端路由总线设计开源最佳实践:Android平台页面路由框架ARouter(演讲)Android 跨模块通信阿里ARouter使用及源码解析(一)2 ARouter 使用2.1 遇到的问题 使用 withObject 传递自定义对象,获取时一直为 null 的问题:解决方案:自定义对象的构造函数必须为空构造传递Object对象,取出来是null值。@Autowired ...…

继续阅读
更早的文章

注解的使用及原理

1 参考资料Android注解快速入门和实用解析Java注解处理器Annotation注解APT(共5篇)【Android】APT自定义注解和解析器实现ButterKnifeAndroid注解简析2 相关概念2.1 注解的作用例如:@Override 就是注解,它的作用是: 检查是否正确的重写了父类中的方法。 标明代码,这是一个重写的方法。1、体现在于:检查子类重写的方法名与参数类型是否正确;检查方法 private/final/static 等不能被重写。实际上 @Override ...…

继续阅读