楼上已经说得很清楚了,我就说说你的最后一个问题吧!
1.先区分一下----单例模式与静态方法:
单例模式只是一种模式,强调某一个实例是唯一的。
静态方法是基于类的方法,与对象没有必然联系。
2.区分一下----单例类与静态类
单例类说得是对象的唯一性,就是采用单例模式的类,单例类强调用它构建的实例是唯一的。
静态类说得是类的唯一性,静态类中的所有的属性和方法都是静态的类,强调该类的所有属性和成员都是基于类的,而不是基于某一个对象的。
3.用单例模式还是静态方法呢,其实他们各有优缺点的,也许一个功能用他们都可以实现目的,但细节方面他们还是有不同的,用单例模式有许多优势,比如,单例可以继承类,实现接口,而静态类不能,再比如,单例可以被延迟初始化,静态类一般在第一次加载是初始化,再比如,单例类可以被集成,他的方法可以被覆写,最后,单例类可以被用于多态而无需强迫用户只假定唯一的实例。举个例子,你可能在开始时只写一个配置,但是以后你可能需要支持超过一个配置集,或者可能需要允许用户从外部从外部文件中加载一个配置对象,或者编写自己的。你的代码不需要关注全局的状态,因此你的代码会更加灵活。
但是,用静态方法也有单例模式不具备的优势,静态方法中产生的对象,会随着静态方法执行完毕而释放掉,而且执行类中的静态方法时,不会实例化静态方法所在的类。如果是用singleton, 产生的那一个唯一的实例,会一直在内存中,除非整个JVM退出了。 |