单例模式,懒汉式和饿汉式

单例模式使用场景:

当我们考虑单例模式时,可以将其类比为某种资源或服务,这种资源或服务在整个应用程序中只需一个实例即可满足需求。下面以一个简单的日志记录器为例来解释什么情况下使用饿汉模式,什么情况下使用懒汉模式。

适合使用饿汉模式的场景:

实际例子: 假设我们有一个日志记录器,它负责在应用程序中记录各种信息,如错误日志、警告信息等。这个日志记录器在应用程序运行期间始终只需要一个实例,而且创建实例的成本较低。

java 代码实例:

public class Logger {
    // 在类加载时就创建实例并初始化
    private static final Logger instance = new Logger();
    
    // 私有构造方法,避免类在外部被实例化
    private Logger() {}
    
    // 提供一个获取实例的静态方法
    public static Logger getInstance() {
        return instance;
    }
    
    // 记录日志的方法
    public void log(String message) {
        System.out.println("Log: " + message);
    }
    
    // 其他日志相关方法...
}

在这个例子中,我们使用饿汉模式创建了一个日志记录器的单例实例。因为日志记录器的创建成本较低,而且在应用程序运行期间始终需要一个实例,所以在应用程序启动时就创建实例是合理的。

适合使用懒汉模式的场景:

实际例子: 假设我们有一个连接数据库的管理器,它负责在需要时创建数据库连接,并提供给应用程序使用。这个数据库连接管理器在应用程序中只需要一个实例,但是创建数据库连接的成本较高。

Java代码示例:

public class DbConnectionManager {
    // 声明一个私有静态变量来保存实例
    private static DbConnectionManager instance;
    
    // 私有构造方法,避免类在外部被实例化
    private DbConnectionManager() {}
    
    // 提供一个获取实例的静态方法
    public static synchronized DbConnectionManager getInstance() {
        // 如果实例为空,则创建实例
        if (instance == null) {
            instance = new DbConnectionManager();
        }
        return instance;
    }
    
    // 获取数据库连接的方法
    public Connection getConnection() {
        // 实现获取数据库连接的逻辑...
        return null; // 假设返回数据库连接对象
    }
    
    // 其他数据库连接管理方法...
}

在这个例子中,我们使用懒汉模式创建了一个数据库连接管理器的单例实例。因为创建数据库连接的成本较高,并不是每次启动应用程序都会立即使用到数据库连接,所以延迟到需要时才创建实例是合理的。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值