单例模式
Scala没有静态方法或静态字段,你可以用object这个语法结构来达到同样的目的。对象定义了某个类的单个实例,包括你想要的特性。例如:
object Account {
private var lastNumber = 0;
def newUniqueNumber() = {
lastNumber += 1; lastNumber
}
}
当你在应用程序中需要一个新的唯一账号时,调用Accounut.newUniqueNumber()
即可。
对象的构造器在该对象第一次被使用时调用。在本例中,Accounts的构造器在Accounts.newUniqueNumber()的首次调用时执行。如果一个对象从未被使用,那么其构造器也不会被执行。
对象本质上可以拥有类的所有特性 ---- 它甚至可以扩展其他类或特质。只有一个例外:你不能提供构造器参数。
对于JAVA或C++中会适用单例对象的地方,在Scala中都可以用对象来实现:
- 作为存放工具函数或常量
- 高效低共享单个不可变实例
- 需要用单个实例来协调某个服务时