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
      }
    }
    

      

  • 相关阅读:
    MVC中生成PDF并在web中显示
    Excel中如何避免删除未筛选得数据
    double数据类型四舍五入的bug
    Oracle 计算两个日期间时间排除非工作日及非工作时间精确至分钟
    数据库日志文件收缩
    Repeater 数据绑定 分页
    文件迁移 得到文件夹下所有文件名称
    共享业务稳定性测试&技术创新组
    产品测试组和业务测试组
    初级Bug率,随时受不了
  • 原文地址:https://www.cnblogs.com/joey-413/p/14071450.html
Copyright © 2011-2022 走看看