在一些项目中,我经常看到一些人乱用单例模式,或者用的不好。单例模式有以下特点:
1,单例类有且只有一个自身向其他对象提供的实例。
2,单例对象必须自己创建这个实例。
单例类一般有两种写法:
1,饿汉式:
package singleton; public class Singleton { /** * 饿汉式获取对象实例 */ private static Singleton instance = new Singleton(); /** * 私有构造子 */ private Singleton(){ } /** * 外部对象唯一获取示例的方法 * @return */ public static Singleton getInstance(){ return instance; } /** * @param args */ public static void main(String[] args) { Singleton instance = Singleton.getInstance(); } }
二:懒汉式
package singleton; public class LazySingleton { private static LazySingleton instance = null; /** * 私有构造子 */ private LazySingleton(){ } /** * 外部对象唯一获取示例的方法 * 此处用synchronized来防止多线程环境下对象被多次实例化的情况 * @return */ public synchronized static LazySingleton getInstance(){ if(instance==null) instance = new LazySingleton(); return instance; } /** * @param args */ public static void main(String[] args) { LazySingleton instance = LazySingleton.getInstance(); } }
总结:饿汉和懒汉各有优点。饿汉式在自己被加载时就已经实例化了,而懒汉式则在第一次调用它的实例化方法时才会实例化。饿汉式是以空间换时间,懒汉式是以时间换空间。编程时一般我喜欢用饿汉式,不光是因为饿汉式简单,还由于饿汉更适合java。