快速上手单例模式:从零开始掌握Java单例设计

本文详细介绍了Java中单例设计模式的实现方法,包括动机、使用场景和具体代码示例。通过私有构造器、静态成员变量和全局访问点,确保类只有一个实例并提供全局访问。适合初学者快速理解和实践单例模式。

快速上手单例模式:逐步指南

作为我在网络上的首次亮相,我希望能够确保未来再次回到这个博客页面并持续写作。现在,这是一个快速的5分钟指南,帮助你动手实践单例模式。作为任何人的第一个模式,单例模式似乎总是最容易适应的,但讽刺的是,它往往是你痛苦的根源——当你意识到一开始的做法并不正确时。更多细节将在后面讨论。

这篇文章应该能帮助你正确掌握单例模式,并找到其中的精髓。像其他模式一样,单例模式背后也有一个目标。那是什么?

动机

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

好处

单例模式的简单好处包括:

  • 受控访问
  • 允许可变数量的实例
  • 减少命名空间

何时使用

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

如何使用:逐步指南

  1. 创建一个类

    1
    
    public class SimplySingleton {}
    
  2. 声明一个成员变量。此变量用于保存单例实例。它必须是私有的,以便无法从其他地方访问;必须是静态的,以便在整个过程中只保存一个实例。

    1
    
    private static SimplySingleton simplySingleton = null;
    
  3. 声明一个私有构造器。创建私有构造器意味着其他任何人都无法实例化此类。

    1
    
    private SimplySingleton() {}
    
  4. 现在所有内容都是私有的,我们如何访问它?创建一个全局访问点。

    1
    
    public static SimplySingleton getInstance() {}
    
  5. 如何从外部访问?SimplySingleton.getInstance(); 此方法应返回一个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();
    }
}

以下是一些深入了解单例模式的优质资源。

更多资源:

Singleton Pattern on wikipedia

Implementing the Singleton Pattern in Java

OO Design

SINGLETON PATTERN - 1. THREAD SAFETY

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