博客
关于我
23设计模式-单例模式(创建型模式)
阅读量:311 次
发布时间:2019-03-01

本文共 1104 字,大约阅读时间需要 3 分钟。

单例模式

单例模式是一种设计模式,旨在确保一个类在整个应用中只存在一个实例。这种模式通过控制实例化过程,防止多个对象的创建,节省内存资源并提高性能。单例模式的核心思想是确保类中只存在一个对象实例,并通过私有化构造方法和静态方法供外部获取。

单例模式的实现方式

单例模式有多种实现方式,常见的有以下几种:

1. 饿汉式(静态常量)

这种实现方式通过在类装载时就创建实例,并将实例存储在一个静态常量中。这种方式在类装载时就完成实例化,避免了线程同步问题,但在类转载时可能造成内存浪费。

2. 饿汉式(静态代码块)

与静态常量实现方式类似,但将实例化过程放在静态代码块中。这种方式在类装载时执行静态代码块,初始化实例。优缺点与静态常量方式相同。

3. 懒汉式(线程不安全)

这种方式通过检查实例是否为 null 来控制实例化。虽然在单线程情况下能够保证实例唯一性,但在多线程环境下可能导致线程安全问题,多个线程可能同时创建实例。

4. 懒汉式(线程安全)

为了解决线程不安全的问题,这种方式使用同步方法修饰实例化操作。虽然保证了线程安全,但由于同步方法的开销较大,可能导致程序效率低下。

5. 懒汉式(同步代码块,线程不安全)

这种方式尝试通过在实例化前加锁来解决线程不安全问题,但由于判断条件和实例化操作都没有加锁,仍然存在多个线程创建实例的风险。

6. 懒汉式(双重检查)

这种方式通过在双重 null 检查中加入锁,确保在多线程环境下也能正确创建实例。这种方式线程安全且效率较高。

7. 懒汉式(静态内部类)

这种方式利用静态内部类的特性,延迟实例化。静态内部类在外部类装载时不会立即加载,直到外部类需要访问方法时才进行实例化。这种方式避免了线程不安全并提高了效率。

8. 懒汉式(枚举类)

这种方式利用枚举类特性,确保单例模式的唯一性,同时避免了反序列化创建新实例的风险。

JDK中的单例模式应用

Java标准库中的 java.lang.Runtime 类使用单例模式,通过一个静态常量存储唯一的实例。这正是饿汉式(静态常量)实现方式的典型应用。

单例模式注意事项

  • 单例类的设计原则:确保类只允许有一个实例,通常通过私有化构造方法和静态获取方法实现。
  • 避免资源泄漏:确保在不需要时及时释放资源,避免内存泄漏。
  • 线程安全:确保在多线程环境下也能正确创建和获取实例。
  • 延迟加载:在第一次访问时进行实例化,减少资源占用。
  • 适用场景:适用于需要频繁创建和销毁的对象,尤其是资源占用较高的对象,如数据库连接池、文件处理工具类等。
  • 单例模式通过控制对象实例的数量,提升了系统性能和资源利用率,是一个非常有用的设计模式。

    你可能感兴趣的文章
    Objective-C实现largestPrime最大素数的算法 (附完整源码)
    查看>>
    Objective-C实现lazy segment tree惰性段树算法(附完整源码)
    查看>>
    Objective-C实现LBP特征提取(附完整源码)
    查看>>
    Objective-C实现LDPC码(附完整源码)
    查看>>
    Objective-C实现least common multiple最小公倍数算法(附完整源码)
    查看>>
    Objective-C实现Lempel-Ziv压缩算法(附完整源码)
    查看>>
    Objective-C实现Length conversion长度转换算法(附完整源码)
    查看>>
    Objective-C实现Levenshtein 距离算法(附完整源码)
    查看>>
    Objective-C实现levenshteinDistance字符串编辑距离算法(附完整源码)
    查看>>
    Objective-C实现lfu cache缓存算法(附完整源码)
    查看>>
    Objective-C实现LFU缓存算法(附完整源码)
    查看>>
    Objective-C实现linear congruential generator线性同余发生器算法(附完整源码)
    查看>>
    Objective-C实现linear regression线性回归算法(附完整源码)
    查看>>
    Objective-C实现linear search线性搜索算法(附完整源码)
    查看>>
    Objective-C实现LinkedListNode链表节点类算法(附完整源码)
    查看>>
    Objective-C实现LinkedList链表算法(附完整源码)
    查看>>
    Objective-C实现logistic regression逻辑回归算法(附完整源码)
    查看>>
    Objective-C实现logistic sigmoid函数(附完整源码)
    查看>>
    Objective-C实现longest Common Substring最长公共子串算法(附完整源码)
    查看>>
    Objective-C实现longest increasing subsequence最长递增子序列算法(附完整源码)
    查看>>