scala 中没有 static 关键字,但是它也为我们提供了单例模式的实现方法,那就是使用关键字 object。
Scala 中使用单例模式时,除了定义的类之外,还要定义一个同名的 object 对象,它和类的区别是,object对象不能带参数。
当单例对象与某个类共享同一个名称时,他被称作是这个类的伴生对象:companion object。你必须在同一个源文件里定义类和它的伴生对象。类被称为是这个单例对象的伴生类:companion class。类和它的伴生对象可以互相访问其私有成员
class SingleDemo {
def eat(){
println("eat ....")
}
var x = 0
}
object SingleDemo{
def apply() = new SingleDemo; //模拟实现单例
def staticFun(){
println("静态方法"+num)
}
def run(){
println("run ....")
}
var num= 0
def numIncr(){
num+=1
}
}
class TestSingle{
}
object TestSingle extends App{
val single1 = SingleDemo //调用object SingleDemo 单例
val single2 = SingleDemo //调用object SingleDemo 单例
val instance = SingleDemo() //调用class SingleDemo 非单例
println(single1)
println(single2)
var i = 0
for(i <- 1 to 20){
SingleDemo.numIncr()
}
SingleDemo.staticFun() //静态调用
single1.staticFun()
println(SingleDemo.num)
}
输出结果
com.czt.test.SingleDemo$@74a14482
com.czt.test.SingleDemo$@74a14482
静态方法20
静态方法20
20
4918

被折叠的 条评论
为什么被折叠?



