Singleton模式的要点: 1、某个类只能有一个实例 2、必须自行创建这个实例 3、必须向整个系统提供这个实例
Singleton模式的实现方法 1、饿汉式singleton public class EagerSingleton { private static final EagerSingleton m_instance = new Eagersingleton(); private Eagersingleton(){}
public static EagerSingleton getInstance() { return m_instance; }
}
2、懒汉式singleton public class LazySingleton { private static LazySingleton m_instance = null; private LazySingleton(){}; synchronized public static LazySingleton getInstance() { if( m_instance == null ) { m_instance = new LazySingleton(); } return m_instance; } }
3、登记式singleton import java.util.HashMap; public class RegSingleton { static private HashMap m_registry = new HashMap(); static { RegSingleton x = new regSingleton(); m_registry.put(x.getClass().getName(), x); } protect RegSingleton(){} static public RegSingleton getInstance(String name) { if(name == null ) { name = "RegSingleton"; } if(m_registry.get(name ) == null ) { m_registry.put(name, Class.forName(name).newInstance(); } catch(Exception e) { System.out.println("Error happened."); } return (RegSingleton)(m_registry.get(name)); } }
三种Singleton模式的比较
饿汉式 类被加载时就被实例化。 懒汉式 类加载时,不被实例化,在第一次引用时实例化。
饿汉式、懒汉式都不能被继承 而登记式可以被继承。

|