public class Singleton{
static private HashMap registry=new HashMap(); // 静态块,在类被加载时自动执行
static{
Singleton rs=new Singleton();
registry.put(rs.getClass().getName(),rs);
} // 受保护的默认构造函数,如果为继承关系,则可以调用,克服了单例类不能为继承的缺点
protected Singleton(){}
//静态工厂方法,返回此类的唯一实例 public
public static Singleton getinstance(String name){
if(name==null){
name="Singleton";
}
if(registry.get(name)==null){
try{
registry.put(name,Class.forName(name).newInstance());
} catch(Exception ex){
ex.printStackTrace();
}
}
return (Singleton)registry.get(name);
}
}<span style="font-family: Arial, Helvetica, sans-serif;"> </span><span style="font-family: Arial, Helvetica, sans-serif;">二、用处 </span><span style="font-family: Arial, Helvetica, sans-serif;">有一些对象其实我们完全只需要一个即可,如:线程池(threadpool)、缓存(cache)、注册表(registry)的对象、设备的驱动程序的对象等等。事实上,这些类的对象只能有一个实例,如果制造出多个实例,就会导致许多问题的产生,例如:程序的行为异常、资源的过量使用、产生不一致的结果等等。Java Singleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。我们常常看到工厂模式中类装入器(class loader)中也用Singleton模式实现的,因为被装入的类实际也属于资源。 </span>
</pre><pre name="code" class="java">