设计模式23篇之 单例模式

什么是单例模式?

单例模式是指:保证在整个的软件系统中,某个类只能存在一个对象实例。

单例模式的应用场景

比 如 HibernateSessionFactory,它 充 当 数 据 存 储 源 的 代 理 ,并 负 责 创 建 Session 对象. SessionFactory 并不是轻量级的,一般情况下,一个项目通常只需要一个 SessionFactory 就够,这是就会使用到单例模式。Scala 的并发框架Akka 中的ActorySystem 也是如此.

根据单例实例化时间不同分为懒汉式恶汉式

单例模式-懒汉式

object TestSingleTon {
  def main(args: Array[String]): Unit = {
    val instance1 = SingleTon.getInstance
    val instance2 = SingleTon.getInstance
    if (instance1 == instance2) {
      println("相等")
    }
  }
}

//将SingleTon的构造方法私有化
class SingleTon private() {}

//懒汉式
//看底层
/*
  public SingleTon getInstance() {
    if (s() == null) {
      s_$eq(new SingleTon());
    }
    return s();
  }
 */
object SingleTon { //SingleTon$
  private var s: SingleTon = null

  def getInstance = {
    if (s == null) {
      s = new SingleTon
    }
    s
  }
}

单例模式-饿汉式

object TestSingleTon2 {
  def main(args: Array[String]): Unit = {
    val instance1 = SingleTon2.getInstance
    val instance2 = SingleTon2.getInstance
    if (instance1 == instance2) {
      println("相等~~~")
    }
  }
}


//将SingleTon的构造方法私有化
class SingleTon2 private() {}

//饿汉式
//看底层
/*
public SingleTon2 getInstance() {
    return s();
  }
 */
object SingleTon2 { //SingleTon$
  private val s: SingleTon2 = new SingleTon2

  def getInstance = {
    s
  }
}
发布了125 篇原创文章 · 获赞 238 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_33709508/article/details/103626274