当前位置: 首页 > news >正文

面试题:请解释Java中的设计模式,并举例说明单例模式(Singleton Pattern)的实现方式

Java中的设计模式

设计模式是在软件开发过程中针对特定场景而使用的通用解决方案。设计模式可以帮助开发者编写出更加清晰、灵活和可维护的代码。设计模式分为三大类:

  1. 创建型模式:用于对象的创建过程,如单例模式、工厂模式、建造者模式等。
  2. 结构型模式:用于处理类或对象的组合,如适配器模式、桥接模式、装饰器模式等。
  3. 行为型模式:用于处理对象之间的通信,如观察者模式、策略模式、命令模式等。

单例模式(Singleton Pattern)

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。

单例模式的实现方式
1. 饿汉式单例模式

饿汉式单例模式在类加载时就创建实例,适用于实例创建开销不大的情况。

public class Singleton {private static final Singleton INSTANCE = new Singleton();private Singleton() {}public static Singleton getInstance() {return INSTANCE;}
}
2. 懒汉式单例模式

懒汉式单例模式在第一次使用时才创建实例,适用于实例创建开销较大的情况。

public class Singleton {private static Singleton INSTANCE;private Singleton() {}public static synchronized Singleton getInstance() {if (INSTANCE == null) {INSTANCE = new Singleton();}return INSTANCE;}
}
3. 双重检查锁定单例模式

双重检查锁定单例模式通过两次检查实例是否为空来确保线程安全,并且只有在实例为空时才进行同步,提高了性能。

public class Singleton {private static volatile Singleton INSTANCE;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 Singleton() {}private static class SingletonHolder {private static final Singleton INSTANCE = new Singleton();}public static Singleton getInstance() {return SingletonHolder.INSTANCE;}
}
5. 枚举单例模式

枚举单例模式利用枚举的特性,确保实例的唯一性,并且提供了序列化机制,防止反序列化时创建多个实例。

public enum Singleton {INSTANCE;public void doSomething() {System.out.println("Singleton  instance is doing something");}
}

单例模式的使用场景

单例模式适用于以下场景:

  1. 全局配置管理:如数据库连接池、日志记录器等。
  2. 缓存管理:如缓存实例、单例对象等。
  3. 资源管理:如文件操作、线程池等。

相关文章:

  • 解决WSL、Ubuntu的.ico图标不正确显示缩略图
  • 解决IDEA Maven编译时@spring.profiles.active@没有替换成具体环境变量的问题
  • 将本地文件上传到云服务器上
  • Redis+Caffeine构建高性能二级缓存
  • 数据出境的安全合规思考
  • 蓝桥杯13届国赛 2022
  • Java设计模式之代理模式:从入门到精通(保姆级教程)
  • 我开源了一个免费在线工具!UIED Tools
  • 【Jenkins简单自动化部署案例:基于Docker和Harbor的自动化部署流程记录】
  • 【现代深度学习技术】注意力机制05:多头注意力
  • AIGC时代的内容安全:AI检测技术如何应对新型风险挑战?
  • 国产密码新时代!华测国密 SSL 证书解锁安全新高度
  • 鸿蒙 UIAbility组件与UI的数据同步和窗口关闭
  • 【C++】”如虎添翼“:模板初阶
  • 区块链大纲笔记
  • java每日精进 5.11【WebSocket】
  • Python爬虫第20节-使用 Selenium 爬取小米商城空调商品
  • 运用数组和矩阵对数据进行存取和运算——NumPy模块 之四
  • 现代化水库运行管理矩阵平台如何建设?
  • 【Linux篇章】Linux 进程信号2:解锁系统高效运作的 “隐藏指令”,开启性能飞跃新征程(精讲捕捉信号及OS运行机制)
  • 《审判》|“被告”的魅力:K在等什么?
  • 网信部门曝光网络谣言典型案例,“AI预测彩票号码百分百中奖”等在列
  • 中国科考船在钓鱼岛附近活动,外交部:完全是中国主权权利范围内的事
  • 中美瑞士会谈后中国会否取消矿产出口许可要求?外交部回应
  • 泰特现代美术馆25年:那些瞬间,让艺术面向所有人
  • 国博馆刊|北朝至唐初夏州酋豪李氏家族的发展与身份记忆