单例注册表(应该属于饿汉模式吧?)

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">

猜你喜欢

转载自blog.csdn.net/tangyu477/article/details/39944069