单例介绍:
保证整个软件系统中,某个类只能存在一个对象实例
应用场景例如:一家店的店主只能有一个;一个车的驾驶员也只能有一个;等
类别:
饿汉式:
类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。
不使用时就加载到内存,占用了资源
// 测试类 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 } }