近期在看android的网络访问类的时候发现有些人用静态类来封装,有些人用单例来封装,突然发现,两种都可以,那究竟使用哪种好呢?这个答案并非是绝对的,两种都可以。就像是抽象类和接口一样,其实很多情况两种方式都可以达到目的,就是看个人理解(抽象类和接口的区别看我的另外一篇文章 接口和抽象类区别)。以下是个人的一些看法。
静态类就像是面向过程时代的方法与一样,是一个工具类,很少依赖其他对象或者资源,只是在面向对象的思想中,一定要用类,而不用像面向过程时代直接调用方法,所以用面向对象封装的特性,才用静态类来把方法封装起来。而单例是一个可以实例化的类,一般跟其他对象或者资源有依赖关系的就用单例,因为他可以实例化,同时可以释放资源等,因为在面向对象思想中,实例化就是表示每个对象的特性都不一样,需要初始化,需要占用资源的,用完了就释放。
另一方面,静态类是非线程安全的,而单例一般是线程安全的(为什么说一般呢?可以参考文章 http://www.cnblogs.com/xudong-bupt/p/3433643.html 自己思考下)。