单例类和单例注册表的实现
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的实例
*/