1.懒汉模式
package 单例模式;
public class SingleTest {
private static SingleTest instance;
private SingleTest(){};
public static synchronized SingleTest getStance(){
if(instance==null){
return new SingleTest();
}
return instance;
}
}
2.双检模式
package 单例模式;
public class SingleTest {
private static SingleTest instance;
private SingleTest(){};
public static SingleTest getStance(){
if(instance==null){
synchronized(SingleTest.class){
if(instance==null){
return new SingleTest();
}
}
}
return instance;
}
}
3.
package 单例模式;
public class SingleTest {
private SingleTest(){}
public static SingleTest getStance(){
return InstanceHolder.instance;
}
private static class InstanceHolder{
private static SingleTest instance = new SingleTest();
}
}
反射破解
package 单例模式;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class Test1 {
public static void main(String[] args) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
SingleTest instance = SingleTest.getStance();
Constructor constructor = SingleTest.class.getConstructor();
constructor.setAccessible(true);
SingleTest instance2 = (SingleTest) constructor.newInstance();
System.out.println(instance);
System.out.println(instance2);
}
}