面试题答案
一键面试1. 饿汉式单例
在 Kotlin 中,使用对象声明(object
关键字)就可以轻松实现饿汉式单例。饿汉式单例在类加载时就立即创建实例,保证了唯一性。
object DatabaseConnectionManager {
private val connection: Connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password")
fun getConnection(): Connection {
return connection
}
}
在数据库连接管理场景中,当需要获取数据库连接时,直接调用DatabaseConnectionManager.getConnection()
即可,由于object
声明的特性,该实例在第一次使用时就已创建且唯一。
2. 懒汉式单例(线程安全)
使用by lazy
关键字可以实现懒汉式单例,且by lazy
默认是线程安全的。懒汉式单例在第一次使用时才创建实例,提高了资源利用效率。
class DatabaseConnectionManager private constructor() {
private val connection: Connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password")
companion object {
val instance: DatabaseConnectionManager by lazy { DatabaseConnectionManager() }
}
fun getConnection(): Connection {
return connection
}
}
在数据库连接管理场景中,获取连接的方式为DatabaseConnectionManager.instance.getConnection()
。这样只有在首次调用instance
时才会创建DatabaseConnectionManager
实例及其数据库连接,既保证了唯一性又实现了懒加载。