单例模式
单例模式中最重要的就是构造器私有,不允许外界进行构造器创建对象
饿汉式
private static Sigton1 instance = new Sigton1();
private Sigton1() {
}
public static Sigton1 getInstance(){
return instance;
}
缺点就是对内存的耗费有些严重,不需要的时候还是占用着内存
懒汉式
private static Sigton1 instance ;
private Sigton1() {
}
public static Sigton1 getInstance(){
if (instance==null){
instance = new Sigton1();
}
return instance;
}
这种在多线程的情况下容易造成产生多个实例。
加锁的懒汉式(双重锁)
private static Sigton1 instance ;
private Sigton1() {
}
public static Sigton1 getInstance(){
if (instance==null){
synchronized (Sigton1.class){
if (instance==null) {
instance = new Sigton1();
}
}
}
return instance;
}
可以通过反射获取该类的构造方法,置为公有的。然后用反射获取到新的对象实例。
public static void main(String[] args) throws IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchMethodException {
Constructor<Sigton1> constructor = Sigton1.class.getDeclaredConstructor(null);
constructor.setAccessible(true);
Sigton1 sigton1 = constructor.newInstance();
Sigton1 sigton11 = constructor.newInstance();
System.out.println(sigton1==sigton11); 此时为false
}
枚举
public enum Sington {
INSTANCE;
public Sington getInstance(){
return INSTANCE;
}
}
此时不能够通过反射进行破坏。会抛出异常。