在写代码的时候,有时候你会遇到一种情况:某个功能只需要一个实例,比如记录日志、配置管理或者工具类。这时候,Scala 的单例对象就派上用场了。
和 Java 中需要手动实现的单例模式不同,Scala 直接提供了 object 关键字来定义单例。只要你写一个 object,编译器就会确保这个对象在整个程序运行期间只存在一份。
怎么写一个单例对象?
举个例子,你家里有个万能工具箱,全家人共用一个,谁要用都去那里拿工具。你可以这样定义:
object ToolBox {
def hammer(): Unit = {
println("使用锤子敲钉子")
}
def screwdriver(): Unit = {
println("用螺丝刀拧螺丝")
}
}之后 anywhere 想用锤子,直接调用 ToolBox.hammer() 就行。不需要 new,也不用担心创建多个实例浪费资源。
和 class 有什么关系?
Scala 还有个有趣的设计叫“伴生”。如果一个 object 和一个 class 同名,并且在同一个文件里,它们就是伴生关系。伴生对象可以访问类里的私有成员,常用来放工厂方法。
class Person private(val name: String)
object Person {
def apply(name: String): Person = new Person(name)
}这样一来,创建 Person 实例就变得特别简单:val p = Person("小明"),连 new 都不用写,像是调用函数一样自然。
这种写法在实际开发中很常见,比如解析配置、启动服务入口、封装常用算法等场景,都能看到单例对象的身影。它让代码更简洁,也更容易维护。