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

面试题:请解释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. 资源管理:如文件操作、线程池等。
http://www.xdnf.cn/news/5559.html

相关文章:

  • [网络层]网络层设备路由器
  • 端到端音频聊天模型论文速读:Voila
  • 基于STM32、HAL库的DPS310XTSA1 气压传感器 驱动程序设计
  • Parasoft C++Test软件单元测试_实例讲解(指针类型的处理)
  • 【计算机网络】HTTP 协议
  • 【星海随笔】信息安全法律法规概述
  • 大数据模型的构建与优化
  • LeetCode 941. 有效的山脉数组 java题解
  • Yocto 项目中的 glibc 编译失败全解析:原因、原理与修复策略
  • 接口继承与扩展的使用技巧
  • 685SJBH计量管理系统
  • Problem D: 异常2
  • MyBatis源码解读2(2.1、核心对象)
  • 【RP2350】香瓜树莓派RP2350之按键
  • B站取关脚本
  • robomaster机甲大师--电调电机
  • C++入门篇——类和对象(下)
  • C/C++表驱动法
  • Kubernetes生产实战(二十):容器大镜像拉取优化指南
  • 8.二叉树减枝
  • 双流 JOIN 与维表 JOIN 的区别
  • 多线程与信号
  • 软件设计师-错题笔记-软件工程基础知识
  • 总结C/C++中程序内存区域划分
  • 判断公网IP办法
  • Java SolonMCP 实现 MCP 实践全解析:SSE 与 STDIO 通信模式详解
  • Kubernetes排错(十三):Pod间偶发超时问题排查
  • 期刊 | 《电讯技术》
  • [SAP] SAP ERP用户参数设置
  • Funplus 服务端开发实习 面经