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);
}
}
本文深入探讨了单例模式的三种实现方式:懒汉模式、双检模式和静态内部类模式。通过代码示例,详细解释了每种模式的工作原理,并讨论了如何使用反射来破坏单例模式。
1522

被折叠的 条评论
为什么被折叠?



