設計模式-之Scala單例模式


單例介紹:

  保證整個軟件系統中,某個類只能存在一個對象實例

  應用場景例如:一家店的店主只能有一個;一個車的駕駛員也只能有一個;等

 

  類別:

    餓漢式:      

         類加載時就完成了初始化,所以類加載比較慢,但獲取對象的速度快。

        不使用時就加載到內存,占用了資源

// 測試類
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
  }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM