Scala学习笔记(五)----单例,伴生对象,类static写法
来源:互联网 发布:网络赚小钱 编辑:程序博客网 时间:2024/06/11 17:08
直接上代码 注意点写在注释里了
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) else null}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) else null def apply(color:String) = if(markers.contains(color)) markers(color) else null}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")) }}
0 0
- Scala学习笔记(五)----单例,伴生对象,类static写法
- 学习笔记10:Scala单例对象、伴生对象
- Scala学习笔记--单例,伴生对象及apply用法
- Scala : 单例对象、伴生类、伴生对象
- [Scala学习笔记]伴生对象和伴生类
- Scala学习笔记11【单例对象、伴生对象、Apply方法】
- 【Scala】单例对象与伴生对象
- 0010.Scala单例对象、伴生对象
- scala 单例对象 伴生对象
- Scala单例对象、伴生类以及伴生对象、apply介绍
- Scala的伴生类、伴生对象与单例对象和apply的介绍
- Scala单例与伴生对象
- Scala学习笔记14【包、类、对象、成员、伴生类、伴生对象访问权限】
- 学习笔记11:Scala中伴生类和伴生对象中Apply方法的应用
- Scala学习第十天 Scala单例对象、伴生对象实战详解
- 010-Scala单例对象、伴生对象实战详解
- Scala单例对象、伴生对象实战详解
- Scala中的伴生对象apply方法和单例对象
- java 加密之Base64示例
- 小测验:你对HTML5了解有多少?
- watch命令监测网络数据流量
- 源码中的设计模式略读
- 打印错误日志,供以后参考
- Scala学习笔记(五)----单例,伴生对象,类static写法
- Retrofit入门教程
- iOS使用cycript调试APP技巧
- POJ 1759 Garland 二分答案
- Q
- Mac OS下fis3 安装教程
- Android中使用Canvas绘制简单的图形(一)
- Kaldi学习手记(三): Kaldi 的I/O机制
- 二部图的最大匹配问题代码详解