如何做网站迁移/app推广方式
直接上代码 注意点写在注释里了
package cn.limbo.demo/***Scala里面创建单例对象非常简单,创建单例对象需要用到object关键字,而非class。因为单例对象无法初始化,所以不能给他的祝构造函数传递参数*/
class Marker(val color:String)
{println("Creating " + this.color)override def toString(): String = "marker color " + this.color
}/***创建了一个Marker的工厂类*/
object MarkerFactory {private val markers = Map("red"->new Marker("red"),"blue"->new Marker("blue"),"green"->new Marker("green"))def getMarker(color:String)=if(markers.contains(color))markers(color)elsenull
}object test {def main(args: Array[String]) {println(MarkerFactory getMarker("blue"))println(MarkerFactory getMarker("red"))println(MarkerFactory getMarker("green"))println(MarkerFactory getMarker("pink"))}
}
不过这段代码有一个问题就是,我们可以跳过MarkerFactory直接创建Marker类
MarkerFactory 就是一个独立对象的例子。尽管它管理着Marker类,但是它并没有关联到任何类上。
package cn.limbo.demo/*** scala也可以创建关联到类上的对象。这样的对象同类共享同一个名字,这样的对象称为伴生对象,对应的类就称为伴生类。* 在scala里,类和伴生对象没有界限,它们互相可以访问彼此的private 方法和private 属性。下面使用伴生对象重写了Marker*/
class Marker private (val color :String ){println("Creating " + this)override def toString() : String = "marker color " + color
}/*** 在重构后的代码中为Marker类新建了伴生对象,伴生对象就是Marker类的实例了。* 此外还使用private修饰了Marker的主构造函数,确保只有它的伴生对象可以创建Marker类的实例,从而保证了Marker类的单例特性。* 当然了,也可以不把Marker类的主构造函数声明为private,但是此时Marker对象作为Marker类的单例实现就仍是不严密的。*/
object Marker{private val markers = Map("red"->new Marker("red"),"blue"->new Marker("blue"),"green"->new Marker("green"))def getMarker(color:String)=if(markers.contains(color))markers(color)elsenulldef apply(color:String) =if(markers.contains(color))markers(color)elsenull
}object test {def main(args: Array[String]) {println(Marker.getMarker("red"))println(Marker getMarker "red")//伴生对象还有一点好处:创建伴生类的实力不需要new关键字。这件妙事是apply()方法提供的,它是Scala的语法糖。以下代码只要调用Marker("red")//就可以创建Marker实例了,其实是调用了Marker.apply("red")println(Marker("red"))println(Marker.getMarker("green"))println(Marker.getMarker("blue"))println(Marker.getMarker("pink"))}
}