zoukankan      html  css  js  c++  java
  • 设计模式-之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
      }
    }
    

      

  • 相关阅读:
    tensorflow中协调器 tf.train.Coordinator 和入队线程启动器 tf.train.start_queue_runners
    C++ 第八天
    C++ 第七天
    C++ 第四天
    c++ 编译报错汇总(随时更新)
    C++ 第二天
    C++ 第三天
    c++ 继承(二)
    c++ 继承(一)
    回调函数
  • 原文地址:https://www.cnblogs.com/joey-413/p/14071450.html
Copyright © 2011-2022 走看看