1,单例类的实现. 可以保证在非同时多线程多类加载器的环境下的单例
public
class
Singleton
...
{
private static Singleton instance;
//私有化构造方法来防止外部通过new 来创建该类的实例
private Singleton ()...{
}
//使用 synchronzied 保证线程安全
public synchronized static Singleton getInstance()...{
if(instance==null)...{
instance= new Singleton();
}
return instance;
}
}
private static Singleton instance;
//私有化构造方法来防止外部通过new 来创建该类的实例
private Singleton ()...{
}
//使用 synchronzied 保证线程安全
public synchronized static Singleton getInstance()...{
if(instance==null)...{
instance= new Singleton();
}
return instance;
}
}
2.单例注册表的实现. 用于操作一组对象的聚集
import
java.util.
*
;
public class SingletonRegistry ... {
private static SingletonRegistry instance;
private static Map factoryMap = new HashMap();
//私有化构造方法
private SingletonRegistry()...{
}
public synchronized static SingletonRegistry getInstance()...{
if(instance==null)...{
instance = new SingletonRegistry();
}
return instance;
}
public synchronized BeanFactroy getBeanFactory(String factoryName)...{
BeanFactroy f=null;
//在注册表中查找看是否有这个BeanFactory的实例
Object o = factoryMap.get(factoryName);
if(o!=null)...{
return (BeanFactroy)o;
}
try ...{
f= (BeanFactroy)Class.forName(factoryName).newInstance();
//将Bean工厂注册到注册表
factoryMap.put(factoryName,f);
}
catch (Exception ex) ...{
ex.printStackTrace();
}
return f;
}
}
interface BeanFactroy ... {
}
/**/ /*一个单例类,通过Map持有BeanFactory的对象聚集。SingletngRegistry本身只有一个实例 但是
*它可以持有任意多个BeanFactory的实例
*/
public class SingletonRegistry ... {
private static SingletonRegistry instance;
private static Map factoryMap = new HashMap();
//私有化构造方法
private SingletonRegistry()...{
}
public synchronized static SingletonRegistry getInstance()...{
if(instance==null)...{
instance = new SingletonRegistry();
}
return instance;
}
public synchronized BeanFactroy getBeanFactory(String factoryName)...{
BeanFactroy f=null;
//在注册表中查找看是否有这个BeanFactory的实例
Object o = factoryMap.get(factoryName);
if(o!=null)...{
return (BeanFactroy)o;
}
try ...{
f= (BeanFactroy)Class.forName(factoryName).newInstance();
//将Bean工厂注册到注册表
factoryMap.put(factoryName,f);
}
catch (Exception ex) ...{
ex.printStackTrace();
}
return f;
}
}
interface BeanFactroy ... {
}
/**/ /*一个单例类,通过Map持有BeanFactory的对象聚集。SingletngRegistry本身只有一个实例 但是
*它可以持有任意多个BeanFactory的实例
*/