【地铁上的设计模式】--创建型模式:单例模式(二)--饿汉式单例

2023-04-28 19:57:49 浏览数 (2)

什么是饿汉式单例

饿汉式单例模式是一种常用的创建型设计模式,它能够确保一个类只有一个实例,并提供了一个全局访问点。不同于懒汉式单例模式在需要时才去创建实例,饿汉式单例模式在类加载时就已经创建好了实例,因此也被称为饿汉式预先加载模式。这种模式的核心思想是在类被加载时就进行初始化,从而避免了线程同步问题。饿汉式单例模式的实现相对简单,只需要将构造函数设为私有,定义一个私有的静态变量保存单例实例,直接在类中进行实例化,提供一个公有的静态方法返回类的唯一实例即可。由于实例在类加载时就已经创建好了,因此饿汉式单例模式的效率比懒汉式单例模式更高。

如何实现饿汉式单例模式

饿汉式单例模式的实现步骤如下:

  1. 将构造函数设为私有,防止外部通过构造函数创建实例。
  2. 定义一个私有的静态变量保存单例实例,并直接在类中进行实例化。
  3. 提供一个公有的静态方法返回类的唯一实例。

通过这样的方式,我们能够确保一个类只有一个实例,并提供了一个全局访问点。在饿汉式单例模式中,实例在类加载时就已经创建好了,因此不存在线程同步问题。饿汉式单例模式的实现相对简单,但是可能会浪费一定的系统资源,因为实例在程序启动时就已经被创建,即使在程序运行过程中并没有用到这个实例。 Java实现

代码语言:javascript复制
public class Singleton {
    private static final Singleton instance = new Singleton();
    private Singleton() {}

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

在这个示例中,我们将构造函数设为私有,定义一个私有的静态变量instance保存单例实例,并直接在类中进行实例化。然后,提供一个公有的静态方法getInstance()返回类的唯一实例。由于实例在类加载时就已经创建好了,因此不存在线程同步问题。我们可以通过Singleton.getInstance()来获取Singleton类的唯一实例。 C#实现

代码语言:javascript复制
public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();
    private Singleton() { }

    public static Singleton Instance
    {
        get
        {
            return instance;
        }
    }
}

在这个示例中,我们使用了sealed关键字来防止继承,将构造函数设为私有,定义一个私有的静态变量instance保存单例实例,并直接在类中进行实例化。然后,提供一个公有的静态属性Instance返回类的唯一实例。由于实例在类加载时就已经创建好了,因此不存在线程同步问题。我们可以通过Singleton.Instance来获取Singleton类的唯一实例。

总结

饿汉式单例模式是一种简单的单例模式实现方式,其实例在类加载时就已经被创建,因此不存在线程同步问题。在多线程环境下也能保证只有一个实例被创建。饿汉式单例模式的实现相对简单,但是可能会浪费一定的系统资源,因为实例在程序启动时就已经被创建,即使在程序运行过程中并没有用到这个实例。

0 人点赞