单例模式是一种设计模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。在软件工程中,这种模式常用于控制共享资源的访问,比如配置信息类、数据库连接池管理等。 单例模式的名称是“Singleton”,来源于英文单词“单一”。在Java语言中,实现单例模式主要有三种方式: 1. **饿汉式**(Eager Initialization):这是最简单的实现方式,类加载时就创建了单例实例。这样保证了线程安全,但可能会造成资源浪费,因为无论是否使用,都会在类加载时创建对象。实现代码通常是将构造函数私有化,然后创建一个静态的类成员实例。 ```java public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} public static Singleton getInstance() { return INSTANCE; } } ``` 2. **懒汉式**(Lazy Initialization):在类被加载后,直到首次调用getInstance方法时才创建实例。这种方式延迟了实例化的时间,但如果不加同步控制,在多线程环境下可能导致多个实例。为了解决这个问题,可以使用synchronized关键字修饰getInstance方法。 ```java public class Singleton { private static Singleton theInstance = null; private Singleton() {} public synchronized static Singleton getInstance() { if (theInstance == null) { theInstance = new Singleton(); } return theInstance; } } ``` 3. **登记式**(Registry,又称双重检查锁定):结合了前两种方式的优点,既延迟了实例化,又保证了线程安全。它在初始化实例时会进行两次检查,第一次是在类加载时,第二次是在同步块内,以避免不必要的同步开销。 ```java public class Singleton { private volatile static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 登记式单例还有一种变体,通过`Class.forName().newInstance()`的方式实现,利用了类加载器的特性来保证单例,这在某些特定场景下可能更为适用。 每种实现方式都有其优缺点。饿汉式简单高效,但可能会造成资源浪费;懒汉式延迟初始化,节省资源,但需处理多线程问题;登记式则在延迟初始化和线程安全之间找到了平衡,但代码相对复杂。此外,登记式单例模式的一个优点是它可以被子类化,而饿汉式和懒汉式单例通常不支持。 在实际应用中,单例模式常见于以下场合: - **配置信息类**:如XML配置文件的解析,只创建一个解析器实例来读取和管理配置信息。 - **数据库连接池控制类**:管理数据库连接,通过单例确保所有请求都使用同一组连接,提高性能并减少资源消耗。 - **Web应用中的控制类**:如Struts框架的ActionServlet,通过web.xml配置,由容器(如Tomcat)在启动时创建一个全局实例,处理所有请求。 总结来说,单例模式是设计模式的一种,它的核心是限制类的实例化次数为一次,以达到控制共享资源的目的。Java中有多种实现方式,包括饿汉式、懒汉式和登记式,它们在实现细节和性能上有差异,适用于不同的应用场景。理解并熟练运用这些实现方式,可以帮助我们编写出更高效、更可靠的代码。
2025-11-13 21:36:27 1.44MB 单例模式
1
c++单例模式, 需要boost中的function、bind、shared_ptr支持; 很好用; 下载中含简单的测试代码; 原帖:http://blog.csdn.net/CDScan/archive/2009/11/21/4848084.aspx
2023-11-14 08:04:20 2KB singleton
1
基于观察者模式和单例模式的java聊天室 面向对象设计,抽象,封装,代理,组合和继承 适合理解java面向对象,socket编程,观察者模式和单例模式
1
1)程序功能:单例模式设计Memcache和Redis操作类,采用PHP编写。 2)程序详解地址:http://blog.csdn.net/clevercode/article/details/46410055。 3)原创作品,出自"CleverCode的博客",分类为《设计模式之PHP项目应用》。 4)欢迎大家关注博客更多精彩的内容:http://blog.csdn.net/CleverCode。
2023-10-10 09:01:19 3KB 单例模式
1
一个简单的java工程,包含注释,一目了然,其中包含了单例模式的所有实现方式,懒汉式,饿汉式,双重校验,枚举,静态内部类等方式实现单例。
1
如题。 没有什么特别要说明的。 一个C#版单例模式的xml解析类
2023-04-06 09:35:30 23KB C# 单例模式 C# Xml解析
1
主要介绍了Java单例模式,结合实例形式简单分析了java单例模式的定义与使用技巧,需要的朋友可以参考下
2022-12-27 10:34:05 37KB Java 单例模式
1
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)实验报告,基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java输入输出流;进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
2022-12-16 21:10:52 136KB 文档资料 单例模式 java 开发语言
1
NULL 博文链接:https://gaojiewyh.iteye.com/blog/411889
2022-10-29 23:03:39 432KB 源码 工具
1
MVC 单例模式 dao模式 jsp+servlet+javabean
2022-10-24 22:09:49 622KB MVC 单例模式 dao模式 jsp+servlet+javabean
1