单例模式是GOF23种设计模式中较为常用的模式之一,它有五种实现方式,个人认为这五种方式没有优劣之分,只是在不同的业务场景下会有不同的表现及特性,这五种实现方式有一个共同的特点就是这五种方式都是线程安全的。
代码及特性
1.饿汉式:单例对象立即加载,没有延时加载机制,效率高
public class Singleton{
private static Singleton instance = new Singleton();//类加载时立刻加载
private Singleton(){} //私有化构造器//方法没有同步,调用效率高
public static Singleton getInstance(){
return instance;
}
}
2.懒汉式:资源利用的效率高了,但是懒加载会导致了调用效率降低。
public class Singleton{
private static Singleton instance ;
private Singleton(){} //私有化构造器
public static Singleton getInstance(){
if(instance==null){
instance=new Singleton();//在用的时候才会实例化单例对象
}
return instance;
}
}
3.双重检测所模式:不常用,因为编译器优化原因和JVM底层内部模型不支持,偶尔会出问题,所以也不建议使用
public class singleton {
private static volatile singleton instance = null; //volatile实现线程安全
private singleton() {}//私有化构造方法
public static singleton getInstance() {
if (instance == null) {
synchronized (singleton.class) {
if (instance == null) {
instance = new singleton();
}
}
}
return instance;
}
}
4.静态内部类也是一种懒加载模式,兼备并发高效调用和延时加载的优势
public class Singleton{
private static class SingletonClassInstance{
private static final Singleton instance = new Singleton();
}
private Singleton(){} //私有化构造器
public static singleton getInstance(){
return SingletonClassInstance.instance;
}
}
5.枚举类实现:唯一的缺点是没有延时加载,可以天然防止反射破解。
public enum Singleton{
INSTANCE;//定义枚举元素 天然单例 天然防止反射破解
//添加自己需要的操作
public void singleton(){
}
}
纪念第一次写博客—TIMESTAMP:2019.12.27 15:26:10