什么是饿汉式单例
饿汉式单例模式是一种常用的创建型设计模式,它能够确保一个类只有一个实例,并提供了一个全局访问点。不同于懒汉式单例模式在需要时才去创建实例,饿汉式单例模式在类加载时就已经创建好了实例,因此也被称为饿汉式预先加载模式。这种模式的核心思想是在类被加载时就进行初始化,从而避免了线程同步问题。饿汉式单例模式的实现相对简单,只需要将构造函数设为私有,定义一个私有的静态变量保存单例实例,直接在类中进行实例化,提供一个公有的静态方法返回类的唯一实例即可。由于实例在类加载时就已经创建好了,因此饿汉式单例模式的效率比懒汉式单例模式更高。
如何实现饿汉式单例模式
饿汉式单例模式的实现步骤如下:
- 将构造函数设为私有,防止外部通过构造函数创建实例。
- 定义一个私有的静态变量保存单例实例,并直接在类中进行实例化。
- 提供一个公有的静态方法返回类的唯一实例。
通过这样的方式,我们能够确保一个类只有一个实例,并提供了一个全局访问点。在饿汉式单例模式中,实例在类加载时就已经创建好了,因此不存在线程同步问题。饿汉式单例模式的实现相对简单,但是可能会浪费一定的系统资源,因为实例在程序启动时就已经被创建,即使在程序运行过程中并没有用到这个实例。 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类的唯一实例。
总结
饿汉式单例模式是一种简单的单例模式实现方式,其实例在类加载时就已经被创建,因此不存在线程同步问题。在多线程环境下也能保证只有一个实例被创建。饿汉式单例模式的实现相对简单,但是可能会浪费一定的系统资源,因为实例在程序启动时就已经被创建,即使在程序运行过程中并没有用到这个实例。