【揭秘单例模式】如何用面向对象设计实现唯一实例?

发布时间:2025-06-08 02:37:48

单例形式是一种常用的计划形式,其核心头脑是确保一个类只有一个实例,并供给一个全局拜访点。这种形式在资本管理、日记效劳、数据库连接等方面尤为罕见。本文将深刻探究单例形式的计划道理、实现方法以及在差别编程言语中的具体利用。

单例形式的基本道理

单例形式经由过程限制一个类只有一个实例,并供给一个拜访它的全局拜访点来实现。其基本道理如下:

  1. 私有构造函数:将类的构造函数设置为私有,避免外部经由过程 new 关键字直接创建实例。
  2. 静态实例变量:在类外部创建一个静态实例变量,用于存储类的独一实例。
  3. 静态拜访方法:供给一个静态方法,用于前去类的独一实例。假照实例尚未创建,则创建一个新的实例;假如曾经存在,则直接前去该实例。

单例形式的实现方法

单例形式重要有以下多少种实现方法:

1. 饿汉式

饿汉式单例在类加载时就破即初始化实例,并持有该实例。这种方法简单易用,但可能会形成内存的挥霍。

public class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return instance;
    }
}

2. 勤汉式

勤汉式单例在第一次挪用 getInstance() 方法时才创建实例。这种方法可能节俭内存,但可能会在多线程情况下呈现线程保险成绩。

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

3. 双重检查锁定

双重检查锁定(Double-Checked Locking)是一种在多线程情况下进步单例形式效力的方法。它经由过程在同步块中再次检查实例能否为 null 来避免不须要的同步。

public class Singleton {
    private static volatile Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

4. 静态外部类

静态外部类单例形式利用静态外部类跟类加载机制保证单例的独一性。这种方法简单且保险,且不线程保险成绩。

public class Singleton {
    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }

    private Singleton() {}

    public static final Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}

5. 罗列实现

罗列实现单例形式是 Java 中最简单、最保险的方法。罗列范例的每个常量都是独一的,因此可能直接利用罗列常量作为单例。

public enum Singleton {
    INSTANCE;

    public void whateverMethod() {
    }
}

单例形式的利用处景

单例形式在以下场景中非常有效:

  1. 资本管理:比方数据库连接池、文件体系操纵等。
  2. 日记效劳:确保全部利用顺序利用同一个日记记录器。
  3. 设置管理:比方加载设置文件、体系参数等。
  4. 缓存:比方缓存数据库查询成果、页面缓存等。

总结

单例形式是一种简单而富强的计划形式,它经由过程确保一个类只有一个实例来增加资本耗费,进步体系机能。在现实利用中,应根据具体须要抉择合适的单例实现方法。