![cover](http://image.wzoe.fun/i/2024/06/10/6665fae2dea70.png)
设计模式-单例模式(Singleton Pattern)
AI-摘要
佐伊 GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
概要
意图
确保一个类只有一个实例,并提供一个全局访问点来访问该实例。
主要解决
频繁创建和销毁全局使用的类实例的问题。
优点
内存中只有一个实例,减少内存开销,尤其是频繁创建和销毁实例时(如管理学院首页页面缓存)。
避免资源的多重占用(如写文件操作)。
缺点
没有接口,不能继承。
与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心实例化方式。
实现方式
懒汉,线程不安全
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
懒汉,线程安全
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
饿汉
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton (){}
public static Singleton getInstance() {
return instance;
}
}
双检锁
public class SingletonDoubleCheck {
private SingletonDoubleCheck() {
}
private static volatile SingletonDoubleCheck instance;
public static SingletonDoubleCheck getInstance() {
if (instance == null) {
synchronized (SingletonDoubleCheck.class) {
if (instance == null) {
instance = new SingletonDoubleCheck();
}
}
}
return instance;
}
}
静态内部类(推荐)
public class SingletonInnerClass {
private SingletonInnerClass() {
}
private static class SingletonHolder {
private static final SingletonInnerClass INSTANCE = new SingletonInnerClass();
}
public static SingletonInnerClass getInstance() {
return SingletonHolder.INSTANCE;
}
}
枚举
public enum SingletonEnum {
INSTANCE;
public static SingletonEnum getInstance() {
return INSTANCE;
}
}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员佐伊
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果