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

      

  • 相关阅读:
    docker国内镜像地址
    springBoot+websocket集群系列知识
    多个idea项目使用同一个tomcat
    nginx+tomcat遇到的https重定向到http问题
    设置常用错误页面自定义显示
    mysql关于索引的一些零碎知识点(持续更新)
    Idea使用Lombok简化实体类代码
    mysql索引分类及实现原理
    使用SpringSession和Redis解决分布式Session共享问题
    HashMap ConcurrentHashMap解读
  • 原文地址:https://www.cnblogs.com/joey-413/p/14071450.html
Copyright © 2011-2022 走看看