更多设计模式相关知识点详见个人主页【设计模式】专栏
单例设计模式
饿汉模式
-
懒汉(饿汉)单例模式(很饿很着急,加载就创建)
-
在类加载时就完成了实例化
-
优点是线程安全,效率高
-
缺点是浪费资源(无论是否使用都会完成实例化),占用内存大,以空间换时间
-
实现
public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } }
-
饱汉模式
-
饱汉模式(很饱不着急,延迟加载)
-
在类加载时不会进行实例化,只有在第一次使用的时候才会进行实例化
-
优点是节省资源,占用内存小
-
缺点是线程不安全,效率低,以时间换空间
-
实现
public class Singleton { private static Singleton instance; private Singleton() {} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
-
静态内部类的Holder单例模式
- 同时实现了懒加载和线程安全
- 懒加载:将实例的初始化放在静态内部类中,只有当getInstance()方法被调用时才会加载Holder类,此时会创建唯一实例
- 线程安全:构造方法私有
- 实现
public class Singleton {
// 外部类的私有构造方法
private Singleton() {}
// 静态内部类内部加载的时候创建外部类,只加载一次,所以只创建一个
private static class Holder {
private static final Singleton instance = new Singleton();
}
// 外部类静态方法,通过静态内部类的静态成员变量获取
public static Singleton getInstance() {
return Holder.instance;
}
}
枚举类单例模式
- 线程安全,代码整洁,但无法实现延迟加载
- 实现
public enum Singleton {
instance;
public void doSomething() {
// do something
}
}
1041

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



