1.单例模式:
public class A{
//a。饿汉式:声明一个私有静态变量并实例化自己赋给该变量,声明一公有静态方法返回该成员变量;
/*private static A mA = new A();//饿汉式
private A(){}
public static getA(){
return mA;
}*/
//b。懒汉式:声明一个私有静态变量,声明一公有静态方法实例化自己返回该给成员变量;
/*private static A mA = null;//懒汉式
private A(){}
public static A getInstance(){
if(mA == null){
synchronized (A.class){//Double CheckLock
if(mA == null){
mA = new A();
}
}
}
}*/
//c。静态内部类实现单例;
//用的时候才会初始化,建议使用
private A(){}
public static A getInstance(){
return SingletonHolder.sInstance;
}
//静态内部类
private static class SingletonHolder{
private static final A sInstance = new A();
}
}
//d。枚举单例
public enum SingletonEnum{
INSTANCE;
public void doSomething(){
//......
}
}
使用上述单例模式实现,在反序列化时会重新生成新的实例,这时需要加入下面这方法:private Object readResolve()throw ObjectStreamException{
return sInstance;
}
e。使用容器实现单例模式
public class SingletonManager{
private static Map<String ,Object> objMap = new HashMap<String,Object>();
private Singleton(){}
public static void registerService(String key,Object value){
if(!objMap.containsKey(key)){
objMap.put(key,value);
}
}
public static Object getService(String key){
return objMap.get(key);
}
}