设计模式之单例模式

Java中的单例模式(Singleton Pattern)是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点。

实现单例模式通常有两种方式:懒汉式和饿汉式。

懒汉式单例模式是指在需要实例化对象时才进行实例化,在实例化之前,该类没有被实例化。常见的懒汉式实现方式有双重检查锁和静态内部类。

// 双重检查锁实现
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;
    }
}

// 静态内部类实现
public class Singleton {
    private Singleton() {}

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

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

饿汉式单例模式则是在类加载的时候就创建了一个实例,因此可以保证实例的唯一性。常见的饿汉式实现方式有静态常量和静态代码块。

// 静态常量实现
public class Singleton {
    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {}

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

// 静态代码块实现
public class Singleton {
    private static final Singleton INSTANCE;

    static {
        INSTANCE = new Singleton();
    }

    private Singleton() {}

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


无论哪种实现方式,都需要注意线程安全和反序列化等问题。

应用场景:

1、需要限制一个类只能有一个实例,例如线程池、缓存、对话框、日志等。

2、在一个应用程序中,如果有多个实例会导致状态不一致的情况,使用单例模式可以避免这种情况。

3、在某些情况下,系统资源的使用需要限制,例如数据库连接池、线程池等,使用单例模式可以控制系统资源的数量。

4、当我们希望在整个系统中,某个类的对象只存在一个时,可以考虑使用单例模式。

总之,当我们需要保证全局只有一个对象实例,并且需要方便的访问该对象时,可以考虑使用单例模式。

posted @ 2023-03-12 15:18  classic123  阅读(13)  评论(0编辑  收藏  举报