快速上手单例模式 - 一步步详解

本文详细介绍了单例模式的核心概念、实现步骤及代码示例,通过私有构造器、静态成员变量和全局访问点确保类只有一个实例,适用于需要严格控制类实例数量的场景。

快速上手单例模式 - 一步步详解

作为我在网络上的首次亮相,我希望确保未来能持续更新这个博客。现在,让我们花5分钟快速掌握单例模式(Singleton Pattern)的实现。作为许多人接触的第一个设计模式,单例看似简单易用,但 ironically 往往成为痛苦的根源——当你意识到最初的实现并不正确时。

更多细节将在后续讨论。本文旨在帮助你正确实现单例模式,并理解其不同类型。

与其他模式一样,单例模式也有其设计目标。

动机

单例模式确保一个类只有一个实例,并提供对该实例的全局访问点。

优势

单例模式的简单优势包括:

  • 受控的访问
  • 允许可变数量的实例(通过扩展)
  • 减少命名空间污染

使用场景

当类必须只有一个实例时使用。

实现步骤:详解

  1. 创建一个类

    1
    
    public class SimplySingleton{}
    
  2. 声明成员变量 该变量用于保存单例实例。必须为 private(防止外部访问)和 static(确保全局唯一实例)。

    1
    
    private static SimplySingleton simplySingleton = null;
    
  3. 声明私有构造器 私有构造器阻止其他类实例化此类。

    1
    
    private SimplySingleton(){}
    
  4. 创建全局访问点 通过静态方法提供实例访问:

    1
    
    public static SimplySingleton getInstance(){}
    

    外部调用方式:SimplySingleton.getInstance();

  5. 实现实例创建逻辑 方法应返回 SimplySingleton 实例,并确保仅创建一次:

    1
    2
    3
    4
    5
    
    // 4a. 检查变量是否为null?
    if(simplySingleton != null)
        return simplySingleton;
    // 4b. 否则创建新实例
    else return simplySingleton = new SimplySingleton();
    

完整代码示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
public class SimplySingleton {
    // 1. 私有静态成员变量
    private static SimplySingleton simplySingleton = null;
    
    // 2. 私有构造器
    private SimplySingleton(){}
    
    // 3. 全局访问点
    public static SimplySingleton getInstance(){
        // 4a. 检查变量是否为null?
        if(simplySingleton != null)
            return simplySingleton;
        // 4b. 否则创建新实例
        else return simplySingleton = new SimplySingleton();
    }
}

扩展资源

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计