Java设计模式单例模式(Singleton)用法解析 java设计模式单例模式(Singleton)是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局反访问点。单例模式是创建型模式。单例模式在生活中应用也很广泛,比如公司CEO只有一个,部门经理只有一个等。JAVA中ServletCOntext,ServetContextCOnfig等,还有spring中ApplicationContext应用上下文对象,SessionFactory,数据库连接池对象等。使用单例模式可以将其常驻于内存,可以节约更多资源。 单例模式的应用场景: * CEO、部门经理等 * JAVA中ServletCOntext,ServetContextCOnfig等 * Spring中ApplicationContext应用上下文对象,SessionFactory,数据库连接池对象等 单例模式的实现方式有多种,常见的有懒汉式、恶汉式、静态内部类等。 懒汉式(线程不安全): 懒汉式单例模式的实现方式是提供一个静态对象instance,构造函数私有化防止外部创建对象,提供一个静态的getInstance方法来给访问者一个单例对象。这种写法的缺点就是没有考虑到线程安全问题,当多个访问者同时访问的时候很有可能创建多个对象。 懒汉式(线程安全): 懒汉式单例模式的实现方式是在第一种基础上添加了synchronized关键字保证了线程安全。这种写法在并发高的时候虽然保证了线程安全,但是效率很低,高并发的时候所有访问的线程都要排队等待。 恶汉式(线程安全): 恶汉式单例模式的实现方式是直接在运行(加载)这个类的时候创建了对象,之后直接访问。显然这种方式没有起到Lazy loading的效果。但是是线程安全的,实际开发中还是比较常用。 静态内部类(线程安全): 静态内部类单例模式的实现方式是提供一个私有的构造函数,防止外部创建对象,并提供一个静态的getInstance方法来给访问者一个单例对象。这种方式是线程安全的,并且效率高,实际开发中也比较常用。 单例模式是创建型模式,能够确保一个类在任何情况下都绝对只有一个实例,并提供一个全局反访问点。单例模式在生活中应用也很广泛,JAVA中也有许多应用。
2026-04-17 12:44:54 81KB java 设计模式 单例模式 Singleton
1
单态模式(Singleton模式)是Java设计模式中的一种,它的主要目标是确保一个类在整个应用程序中只有一个实例存在。这种模式的应用场景广泛,特别是在需要全局共享的资源管理、配置中心、日志服务等场合非常常见。 单态模式的核心在于限制类的实例化过程,通过私有构造函数防止外部直接创建实例,同时提供一个公共的静态方法来获取唯一实例。以下是两种常见的单态模式实现方式: 1. 饿汉式(Eager Initialization): 这种方式在类加载时就完成了初始化,所以类加载比较慢,但获取实例的速度快,且线程安全。如: ```java public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } } ``` 2. 懒汉式(Lazy Initialization): 这种方式在第一次调用`getInstance()`时才初始化,延迟了类的加载,提高了类的加载速度。但是如果不加锁,多线程环境下可能会创建多个实例。带同步锁的懒汉式实现如下: ```java public class Singleton { private static Singleton instance = null; private Singleton() {} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } ``` 懒汉式通过`synchronized`关键字保证了线程安全,但在高并发环境下,同步锁会降低性能。为了解决这个问题,可以使用双重检查锁定(Double-Checked Locking,DCL)优化懒汉式,但这需要依赖于Java内存模型(JMM)来保证正确性,如下所示: ```java public class Singleton { private volatile static Singleton instance = null; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 这里的`volatile`关键字确保了多线程环境下的可见性和有序性,避免了指令重排序问题。 使用单态模式需要注意以下几点: - 在类加载机制不同的环境中,如Web应用服务器或EJB容器,单态模式可能失效,因为每个类加载器都可能创建自己的单例实例。 - 单例模式可能导致程序难以测试,因为它限制了类的实例化,这在使用依赖注入和单元测试时可能成为问题。 - 如果单例类需要存储状态,需要谨慎处理线程安全问题,特别是当状态需要跨线程共享时。 - 单例模式虽然有助于节省内存,但如果单例对象持有大量资源,长时间不释放,可能导致内存泄漏。 - 避免滥用单例,因为它们可能导致系统的耦合度增加,不利于解耦和模块化。 单态模式是一种强大的设计模式,用于控制类的实例化过程,保证全局只有一个实例。在理解和使用单态模式时,需要根据具体场景权衡其优点和潜在的缺点,确保正确地应用这一模式。
2026-04-16 21:11:53 59KB Java 设计模式 单态模式 Singleton模式
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
本文档,是利用C++来实现设计模式中的,单例模式,里面有内容说明和相关实例代码介绍
2022-05-18 14:10:30 15KB Singleton单例模式
1
Unity单例模式模板类,以供学习,有两个: 一个单纯的Singleton 一个MonoSingleton,继承于MonoBehaviour
2022-04-29 15:13:49 2KB Unity Singleton 单例模式 MonoSingleto
1
C# 23种设计模式之单例模式源码
2021-12-14 20:05:59 38KB C# 设计模式
1
Qt单例模板类。不用再每次去写单例了,按照文件描述操作步骤,就是快速实现单例。我之前同事写的,嘿嘿,我就拿过来mark~ 调不了积分,有需要请留言~
2021-12-13 15:23:45 1KB Qt单例模板类
1
里面包含了,几种单例的实现demo,开包即用
1
基于QT的单例设计模式开发和测试,包括:线程安全的单例生成、静态结构体数组使用和结构体指针new生成。
2021-07-07 15:00:38 3KB qt 设计模式 软件开发
1
汇编语言翻译 该项目仍在进行中!! 该存储库用于模拟汇编语言解释器。 现在,该项目支持以下命令: DEC aSymbol-声明由单个字母(例如X)组成的符号变量。 该变量存储在该指令的存储器位置。 LDA aSymbol-将符号数据存储地址中的字节加载到累加器中。 LDB aSymbol-将数据存储器地址符号中的字节加载到B中。 LDI aValue-将整数值加载到累加器寄存器中。 该值可以为负,但必须在30位2的补码范围内。 ST aSymbol-将累加器的内容存储到符号地址处的数据存储器中。 XCH交换内容寄存器A和B。 JMP aValue-将控制转移到程序存储器中地址号的指令。 JZS安勤-控制权转移给指令地址数,如果零结果位设置。 JVS aValue-如果设置了溢出位,则将控制转移到地址号的指令。 ADD-将寄存器A和B的内容相加。总和存储在A中。溢出和零结果位根据需要设
2021-05-02 22:03:00 14KB java command-pattern singleton-pattern Java
1