singletong

来源:互联网 发布:我的世界精灵盒子java 编辑:程序博客网 时间:2024/05/16 18:15

Singleton模式
发表时间:2005-10-25 05:18:58 作者: 来源:互联网 阅读次数:7

  在本站发表的文章与作品版权归作者共有,如需转载,请注明出自本站及作者姓名。本站所提供的设计作品,如需使用,请与原作者联系,著作版权归原作者所有。 
 


 
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模式的比较
饿汉式 类被加载时就被实例化。
懒汉式 类加载时,不被实例化,在第一次引用时实例化。


饿汉式、懒汉式都不能被继承
而登记式可以被继承。