Kotlin单例代码实例

目录

  • 一、饿汉式的实现
  • 二、懒汉式的实现
  • 三、安全 懒汉式的实现
  • 四、双重校验DCL 的实现

一、饿汉式的实现

Kotlin版本

object SingletonDemoKt/***  背后的逻辑代码:public final class SingletonDemoKt {public static final SingletonDemoKt INSTANCE;private SingletonDemoKt() {}static {SingletonDemoKt var0 = new SingletonDemoKt();INSTANCE = var0;}}*/

Java版本

public class SingletonDemo {private static SingletonDemo mInstance = new SingletonDemo();private SingletonDemo() {}public static SingletonDemo getInstance() {return mInstance;}
}

二、懒汉式的实现

Kotlin版本

class SingletonDemo2Kt {companion object {private var mInstance : SingletonDemo2Kt? = nullget() {if (field == null) {field = SingletonDemo2Kt()}return field}fun getInstance() = mInstance!!}fun show() {println("SingletonDemo2Kt show")}
}fun main() {SingletonDemo2Kt.getInstance().show()
}/*** 背后逻辑代码:public final class SingletonDemo2Kt {private static SingletonDemo2Kt mInstance;public static final SingletonDemo2Kt.Companion Companion = new SingletonDemo2Kt.Companion((DefaultConstructorMarker)null);public final void show() {String var1 = "SingletonDemo2Kt show";boolean var2 = false;System.out.println(var1);}...public static final class Companion {private final SingletonDemo2Kt getMInstance() {if (SingletonDemo2Kt.mInstance == null) {SingletonDemo2Kt.mInstance = new SingletonDemo2Kt();}return SingletonDemo2Kt.mInstance;}private final void setMInstance(SingletonDemo2Kt var1) {SingletonDemo2Kt.mInstance = var1;}@NotNullpublic final SingletonDemo2Kt getInstance() {SingletonDemo2Kt var10000 = ((SingletonDemo2Kt.Companion)this).getMInstance();if (var10000 == null) {Intrinsics.throwNpe();}return var10000;}private Companion() {}// $FF: synthetic methodpublic Companion(DefaultConstructorMarker $constructor_marker) {this();}}}*/

Java版本

public class SingletonDemo2 {private static SingletonDemo2 mInstance;private SingletonDemo2() {}public static SingletonDemo2 getInstance() {if (mInstance == null) {mInstance = new SingletonDemo2();}return mInstance;}public static void show() {System.out.println("SingletonDemo2 show");}public static void main(String[] args) {SingletonDemo2.getInstance().show();}
}

三、安全 懒汉式的实现

Kotlin实现

class SingletonDemo3Kt {companion object {private var mInstance : SingletonDemo3Kt? = nullget() {if (field == null) {field = SingletonDemo3Kt()}return field}@Synchronizedfun getInstance() = mInstance!!}fun show() {println("SingletonDemo3Kt show")}
}fun main() {SingletonDemo3Kt.getInstance().show()
}/*** 背后逻辑代码:public final class SingletonDemo2Kt {private static SingletonDemo2Kt mInstance;public static final SingletonDemo2Kt.Companion Companion = new SingletonDemo2Kt.Companion((DefaultConstructorMarker)null);public final void show() {String var1 = "SingletonDemo2Kt show";boolean var2 = false;System.out.println(var1);}...public static final class Companion {private final SingletonDemo2Kt getMInstance() {if (SingletonDemo2Kt.mInstance == null) {SingletonDemo2Kt.mInstance = new SingletonDemo2Kt();}return SingletonDemo2Kt.mInstance;}private final void setMInstance(SingletonDemo2Kt var1) {SingletonDemo2Kt.mInstance = var1;}@NotNullpublic final SingletonDemo2Kt getInstance() {SingletonDemo2Kt var10000 = ((SingletonDemo2Kt.Companion)this).getMInstance();if (var10000 == null) {Intrinsics.throwNpe();}return var10000;}private Companion() {}// $FF: synthetic methodpublic Companion(DefaultConstructorMarker $constructor_marker) {this();}}}*/

Java版本

public class SingletonDemo3 {private static SingletonDemo3 mInstance;private SingletonDemo3() {}public static synchronized SingletonDemo3 getInstance() {if (mInstance == null) {mInstance = new SingletonDemo3();}return mInstance;}public static void show() {System.out.println("SingletonDemo3 show");}public static void main(String[] args) {SingletonDemo3.getInstance().show();}
}

四、双重校验DCL 的实现

Kotlin实现

class SingletonDemo4Kt private constructor() {companion object {val mInstance : SingletonDemo4Kt by lazy (mode = LazyThreadSafetyMode.SYNCHRONIZED) { SingletonDemo4Kt() }}fun show() {println("SingletonDemo4Kt show")}
}
fun main() {SingletonDemo4Kt.mInstance.show()
}

Java实现

public class SingletonDemo4 {private volatile static SingletonDemo4 mInstance;private SingletonDemo4() {}public static SingletonDemo4 getInstance() {if (mInstance == null) {synchronized (SingletonDemo4.class) {if (mInstance == null) {mInstance = new SingletonDemo4();}}}return mInstance;}public void show() {System.out.println("show");}public static void main(String[] args) {SingletonDemo4.getInstance().show();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/22092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新手Vite打包工具的使用并解决yarn create vite报错

一、手动创建 1.创建vite-Demo文件夹 2.初始化 yarn init -y 3.安装vite yarn add -D vite 4.打包准备 说明&#xff1a;不需要在src下面创建&#xff0c;在vite-Demo文件夹创建 4.1index.js文件 document.body.insertAdjacentHTML("beforeend","<h1>…

Linux6.30 Kubernetes 基础

文章目录 计算机系统5G云计算第一章 LINUX Kubernetes 基础一、Kubernetes 概述1.K8S 是什么2.为什么要用 K8S3.Kubernetes 集群架构与组件4.核心组件——Master 组件1&#xff09;Kube-apiserver2&#xff09;Kube-controller-manager3&#xff09;Kube-scheduler 5.核心组件—…

kafka生产者指定ip

kafka生产者指定ip 最近工作中遇到一个问题&#xff0c;记录一下&#xff0c;需求中要求往kafka上推送信息。本来是个很简单的需求&#xff0c;但是踩了一个坑。 ​ 我通过spring boot集成了kafka写了一个生产者&#xff0c;客户那边给我三个节点的ip&#xff0c;然后我也没多想…

【uniapp APP隐藏顶部的电量,无线,时间状态栏与导航栏】

uniapp APP隐藏顶部的电量&#xff0c;无线&#xff0c;时间状态栏 如下代码配置&#xff08;在一个页面设置这个段代码&#xff0c;所有页面都会消失&#xff09; onShow() {// #ifdef APP-PLUS// 隐藏顶部电池,时间等信息 plus.navigator.setFullscreen(true);//隐藏虚拟按…

排序八卦炉之冒泡、快排【完整版】

文章目录 1.冒泡排序1.1代码实现1.2复杂度 2.快速排序2.1人物及思想介绍【源于百度】2.2hoare【霍尔】版本1.初识代码2.代码分析3.思其因果 2.3挖坑版本1.初始代码2.代码分析3.思想比较 2.4指针版本1.初识代码2.代码分析3.问题探讨 2.5集体优化2.6极致优化2.7非递归版本1.初识代…

sql语句字符函数,数学函数

一、trim&#xff08;&#xff09;去掉前后单元格 SELECT LENGTH(TRIM( 张三 )) AS 姓名 trim&#xff08;aa from bb) 除掉bb中前后包含的aa&#xff0c;中间的保留 SELECT TRIM(班 FROM class) AS 姓名 FROM user_test 二、lpad&#xff08;&#xff09;用指定字符做左…

用Rust实现23种设计模式之桥接模式

桥接模式的优点&#xff1a; 桥接模式的设计目标是将抽象部分和实现部分分离&#xff0c;使它们可以独立变化。这种分离有以下几个优点&#xff1a; 解耦和灵活性&#xff1a;桥接模式可以将抽象部分和实现部分解耦&#xff0c;使它们可以独立地变化。这样&#xff0c;对于抽象…

【css】css实现一个简单的按钮

四种链接状态分别是&#xff1a; a:link - 正常的&#xff0c;未访问的链接a:visited - 用户访问过的链接a:hover - 用户将鼠标悬停在链接上时a:active - 链接被点击时 <style> a:link, a:visited {//未访问、访问过background-color: #07c160;//设置背景颜色color: wh…

Day10-NodeJS和NPM配置

Day10-NodeJS和NPM 一 Nodejs 1 简介 Nodejs学习中文网:https://www.nodeapp.cn/synopsis.html Nodejs的官网:https://nodejs.org/ 概念:Nodejs是JavaScript的服务端运行环境.Nodejs不是框架,也不是编程语言,就是一个运行环境. Nodejs是基于chrome V8引擎开发的一套js代码…

Java设计模式——类之间的关系

1.继承关系(泛化) 类与子类的关系&#xff0c;指一个类继承另外的一个类。 2.实现关系 一个类可以实现多个接口&#xff0c;实现所有接口的功能。 3.依赖关系 类B作为类A方法中的局部变量或者参数出现&#xff0c;表示A依赖B。 4.关联关系 类B作为类A中的成员变量出现&#…

Toyota Programming Contest 2023#4(AtCoder Beginner Contest 311)D题题解

文章目录 [Grid Ice Floor](https://atcoder.jp/contests/abc311/tasks/abc311_d)问题建模问题分析1.分析移动时前后两个点之间的联系2.方法1通过BFS将所有按照给定运动方式可以到达的点都标记代码 3.方法2采用DFS来标记路径上的点的运动状态代码 Grid Ice Floor 问题建模 给定…

linux快速安装Rabbitmq

linux快速安装Rabbitmq 准备yum仓库 # root执行rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.ascrpm --import https://packagecloud.io/rabbitmq/erlang/gpgkeyrpm --import https://packagecloud.io/ra…

测试岗?从功能测试进阶自动化测试开发,测试之路不迷茫...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试新人在想什么…

IO进程线程day7(2023.8.4)

一、Xmind整理&#xff1a; 二、课上练习&#xff1a; 练习1&#xff1a;创建两个线程&#xff1a;其中一个线程拷贝前半部分&#xff0c;另一个线程拷贝后半部分。 只允许开一份资源&#xff0c;且用互斥锁方式实现。 提示&#xff1a;找临界区--->找临界资源。 #includ…

swagger相关问题

swagger相关问题 swagger版本为&#xff1a; <dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>1.9.6</version> </dependency> <dependency><groupId&…

网络安全设备-等保一体机

本文为作者学习文章&#xff0c;按作者习惯写成&#xff0c;如有错误或需要追加内容请留言&#xff08;不喜勿喷&#xff09; 本文为追加文章&#xff0c;后期慢慢追加 等保一体机的功能 等保一体机产品主要依赖于其丰富的安全网元&#xff08;安全网元包括&#xff1a;防火…

sentinel组件

目录 定义 4.加SentinelResource,blockHander是超过阈值之后执行的函数 5.设置阈值 6.springboot集成sentinel 定义 1.sentinel知道当前流量大小&#xff0c;在浏览器和后端之间加sentinel控制流量&#xff0c;避免大批量的瞬时请求都达到服务上&#xff0c;将服务压垮 2.…

汉字姓名转拼音

import osimport pandas as pdfrom xpinyin import Pinyindownpath/Users/Kangyongqing/Downloads/ file1教师姓名转拼音.xlsxdtpd.read_excel(downpathfile1) print(dt.info()) dt[pinyin]dt[教师姓名].apply(lambda x:Pinyin().get_pinyin(x).split(-)[0].capitalize() .join…

谈谈 Kafka 的幂等性 Producer

使用消息队列&#xff0c;我们肯定希望不丢消息&#xff0c;也就是消息队列组件&#xff0c;需要保证消息的可靠交付。消息交付的可靠性保障&#xff0c;有以下三种承诺&#xff1a; 最多一次&#xff08;at most once&#xff09;&#xff1a;消息可能会丢失&#xff0c;但绝…

399. 除法求值

给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件&#xff0c;其中 equations[i] [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi values[i] 。每个 Ai 或 Bi 是一个表示单个变量的字符串。 另有一些以数组 queries 表示的问题&#xff0c;其中 queries[j]…