java设计模式之二单例模式

xiaoxiao2026-08-14  31

单例模式有以下三个特点: 一、单例类在整个系统中只能有一个实例 二、单例类必须自己创建自己的实例 三、单例类必须系统中其他对象提供这个实例 单例类分为三种: 第一种:饿汉式,在类被加载时,静态变量m_instance会被初始化,此时类的私有构造子会被调用。 代码如下: public class NewMMAnalyzer{ private static final NewMMAnalyzer m_instance = new NewMMAnalyzer(); private NewMMAnalyzer() { } public static NewMMAnalyzer getInstance() { return m_instance; }} 第二种:懒汉式,在下面给出懒汉式单例类实现里对静态工厂方法使用了同步化,以处理多线程环境 代码如下: public class NewMMAnalyzer{ private static NewMMAnalyzer m_instance = null; private NewMMAnalyzer() { } synchronized public static NewMMAnalyzer getInstance() { if(m_instance==null){ m_instance = new NewMMAnalyzer(); } return m_instance; }} 第三种:登记式。 代码如下: package lucene.kameilong.MMtoken;import java.util.HashMap;public class NewMMAnalyzer { static private HashMap<String, NewMMAnalyzer> m_registry = new HashMap<String, NewMMAnalyzer>(); static { NewMMAnalyzer x = new NewMMAnalyzer(); m_registry.put(x.getClass().getName(), x); } protected NewMMAnalyzer() { } public static NewMMAnalyzer getInstance(String name) { if (name == null) name = "lucene.kameilong.MMtoken.NewMMAnalyzer"; if (m_registry.get(name) == null) try { m_registry.put(name, (NewMMAnalyzer) Class.forName(name) .newInstance()); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return m_registry.get(name); }}
转载请注明原文地址: https://www.6miu.com/read-5051219.html

最新回复(0)