Java设计模式中的单例模式

Java设计模式中的单例模式

单例模式是一种创建型设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点。

单例模式的两种不同方式

饿汉式单例模式:

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

    private SingletonEager() {
        // 私有构造方法,防止外部实例化
    }

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

懒汉式单例模式:

public class SingletonLazy {
    private static SingletonLazy instance;

    private SingletonLazy() {
        // 私有构造方法,防止外部实例化
    }

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

区别:

  • 饿汉式单例模式(Eager Initialization): 在类加载时就创建实例,因此不存在线程安全问题。但是可能会造成资源浪费,因为不管是否使用该实例,都会在类加载时创建。
  • 懒汉式单例模式(Lazy Initialization): 在第一次使用时才创建实例,避免了资源浪费,但需要考虑线程安全问题。上述代码通过在 getInstance 方法上添加 synchronized 关键字来解决线程安全问题,但会影响性能。

单例模式的具体应用场景

单例模式的应用场景包括:

  • 数据库连接池: 保证多个线程共享一个数据库连接池,避免重复创建连接,提高性能。
  • 配置管理器: 保证在整个应用程序中只有一个配置管理器,确保配置信息的一致性。
  • 日志管理器: 保证在整个应用程序中只有一个日志管理器,确保日志的一致性。

举例说明:

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

    private DatabaseConnectionPool() {
        // 私有构造方法,防止外部实例化
    }

    public static DatabaseConnectionPool getInstance() {
        return instance;
    }

    // 其他数据库连接池相关方法...
}
单例模式的优点
  • 全局唯一实例: 确保一个类只有一个实例,方便对该实例的管理和控制。
  • 延迟加载: 懒汉式单例模式可以在需要时才创建实例,避免了资源浪费。
  • 线程安全(部分实现): 饿汉式单例模式在类加载时就创建实例,不存在线程安全问题;懒汉式单例模式通过加锁等机制可以保证在多线程环境下的安全访问。
  • 提供全局访问点: 全局访问点使得程序可以方便地访问单例对象,统一管理资源或状态。

你可能感兴趣的:(Java设计模式,java,设计模式,单例模式)