导航

设计模式-之Scala单例模式

Posted on 2020-12-01 23:13  乔伊_413  阅读(860)  评论(1编辑  收藏  举报

单例介绍:

  保证整个软件系统中,某个类只能存在一个对象实例

  应用场景例如:一家店的店主只能有一个;一个车的驾驶员也只能有一个;等

 

  类别:

    饿汉式:      

         类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。

        不使用时就加载到内存,占用了资源

// 测试类
object TestSingle extends App {
  val boss1 = Boss.getBoss
  val boss2 = Boss.getBoss
  // 1355531311 1355531311
  print(boss1.hashCode()  + " " + boss2.hashCode())  // 哈希值相等 对象为同一个 实现了单例
}

/*
底层代码
public SingleTon getInstance() {
	if (s == null) {
		s_$eq(new SingleTon());
	}
	return s();
}
*/

class Boss private() {  // Boss类的构造方法私有化
  var name: String = _
  println("懒汉式~~~")
}

// 懒汉式
object Boss {
  private var b: Boss = null   // 先赋值为null
  def getBoss = {
    if (b == null) { // 判断不为null 才实例化对象
      b = new Boss  // 在这里 实例化对象
    }
    b
  }
}

  

    懒汉式:

        等到引用时才会被加载

// 测试类
object TestSingle extends App {
  val b1 = Boss2.getBoss2
  val b2 = Boss2.getBoss2
  // 564160838 564160838  对象为同一个,形成了单例模式
  print(b1.hashCode()  + " " + b2.hashCode()) 
}
class Boss2 private() {  // 构造方法私有化
  var age: Int = _
  println("饿汉式~~~")
}
// 饿汉式
object Boss2 {
  private val b: Boss2 = new Boss2  // 直接实例化对象
  def getBoss2 = {
    b
  }
}