欢迎访问宙启技术站
智能推送

单例模式(SingletonPattern)的实现方法

发布时间:2023-06-10 13:43:57

1.概述

单例模式是一种创建型设计模式,其目标是确保在整个应用程序中只存在一个实例对象,并且提供全局访问该对象的方式。单例模式适用于需要全局唯一的某些类的情况,例如数据库连接池、日志管理器等。

单例模式的实现方法有很多,常见的有饿汉式、懒汉式、双重检查锁定、静态内部类等。

2.饿汉式

饿汉式是一种非常简单的单例模式实现方法,其优点是线程安全,应用启动时就能够实例化对象,不会出现线程安全问题。缺点是如果该对象初始化比较耗时,会导致应用的启动时间变长。

代码实例:

public class Singleton {

    private static Singleton instance = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {

        return instance;

    }

}

3.懒汉式

懒汉式是一种常用的单例模式实现方法,其优点是在需要时才会创建对象,避免了某些耗时的初始化操作,缺点是不是线程安全的。

代码实例:

public class Singleton {

    private static Singleton instance;

    private Singleton() {}

    public static synchronized Singleton getInstance() {

        if (instance == null) {

            instance = new Singleton();

        }

        return instance;

    }

}

4.双重检查锁定

双重检查锁定是一种比较常用的单例模式实现方法,其在保持懒汉式的延迟加载的同时又具备线程安全的特点,避免了并发问题,提高了性能。但其实现较为复杂。

代码实例:

public class Singleton {

    private volatile static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {

        if (instance == null) {

            synchronized (Singleton.class) {

                if (instance == null) {

                    instance = new Singleton();

                }

            }

        }

        return instance;

    }

}

5.静态内部类

静态内部类是一种比较优雅的单例模式实现方法,其利用Java的类加载机制保证了线程安全和懒加载。在Singleton类被加载时,静态内部类SingletonHolder不会被加载进内存,只有当getInstance()方法被调用时才会触发SingletonHolder.INSTANCE的加载,从而实例化Singleton对象。

代码实例:

public class Singleton {

    private Singleton() {}

    private static class SingletonHolder {

        private static final Singleton INSTANCE = new Singleton();

    }

    public static Singleton getInstance() {

        return SingletonHolder.INSTANCE;

    }

}

6.总结

以上是常见的单例模式实现方法,每一种方法都有其优缺点,根据具体场景需求选择适合的实现方法。在编码实践中,单例模式是非常常用的一种设计模式,对于保证和提高系统稳定性和效率具有重要的作用。