Android-Kotlin-单例模式
先看一个案例,非单例模式的案例:
描述Dog对象:
package cn.kotlin.kotlin_oop08
class Dog(var name:String, var color:String) {
/**
* 显示狗狗的名字
*/
fun showDogName() {
println("狗狗的名字是:${this.name}")
}
/**
* 显示狗狗的颜色
*/
fun showDogColor() {
println("狗狗的颜色是:${color}")
}
}
main测试:
package cn.kotlin.kotlin_oop08
fun main(args: Array<String>) {
/**
* Dog("小白", "纯白色") 相当于Java中的 new Dog("小白", "纯白色");
*/
var dog1 = Dog("小白", "纯白色")
dog1.showDogName()
dog1.showDogColor()
println("----------------------")
/**
* Dog("小黑", "黑色") 相当于Java中的 new Dog("小黑", "黑色");
*/
var dog2 = Dog("小黑", "黑色")
dog2.showDogName()
dog2.showDogColor()
println("----------------------")
/**
* 以上代码 由于实例化了 两次Dog() 所以他们的引用肯定是不一样的,所以打印false
*/
println(dog1 == dog2)
/**
* 实例化对象10次
* 以下代码相当于Java中 new Dog() 10次
*/
Dog("参数1", "参数2")
Dog("参数1", "参数2")
Dog("参数1", "参数2")
Dog("参数1", "参数2")
Dog("参数1", "参数2")
Dog("参数1", "参数2")
Dog("参数1", "参数2")
Dog("参数1", "参数2")
Dog("参数1", "参数2")
Dog("参数1", "参数2")
}
执行结果:

以上的 (非单例模式的案例),每当执行Dog() ,就会实例化一个对象,如果多次调用,或者 多个地方调用,会多次实例化,所以需要采用当例模式(只实例化一次)
单例模式案例
描述Dog对象 把class Dog { 修改成>> object Dog { 后 颜色变成黄色了:
把class Dog { 修改成>> object Dog { 后 就属于单例模式了,只实例化一次
package cn.kotlin.kotlin_oop08 /**
* 把class Dog { 修改成了>> object Dog { 后 在JVM中只会实例化一次,可以理解为当例模式
*/
object Dog { var name:String = ""
var color:String = "" /**
* 显示狗狗的名字
*/
fun showDogName() {
println("狗狗的名字是:${name}")
} /**
* 显示狗狗的颜色
*/
fun showDogColor() {
println("狗狗的颜色是:${color}")
}
}
main测试:
package cn.kotlin.kotlin_oop08
fun main(args: Array<String>) {
var dog1 = Dog
dog1.name = "小白"
dog1.color = "纯白色"
dog1.showDogName()
dog1.showDogColor()
println("----------------------")
var dog2 = Dog
dog2.name = "小黑"
dog2.color = "黑色"
// dog2.showDogName()
// dog2.showDogColor()
// 也可以这样调用方法
Dog.showDogName()
Dog.showDogColor()
println("----------------------")
/**
* 以上代码 由于只实例化了1次Dog() 所以他们的引用肯定是一样的,所以打印true
*/
println(dog1 == dog2)
/**
* 永远实例化对象一次
*/
Dog
Dog
Dog
Dog
Dog
Dog
Dog
Dog
Dog
Dog
}
执行结果:

Android-Kotlin-单例模式的更多相关文章
- Android Kotlin —— 语言结合
2017 Google I/O 大会开始就宣布,将Kotlin语言作为安卓开发的一级编程语言. Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发. Ko ...
- Android Kotlin适用小函数
都是一些Android适用的Kotlin小函数. 1.点击空白隐藏键盘 //点击空白隐藏键盘 override fun onTouchEvent(event: MotionEvent): Boolea ...
- Android -------- kotlin插件神器Json直接生成javaBean
这是一个data class从JSON字符串生成Kotlin 的插件,换句话说,是一个将JSON字符串转换为Kotlin data class(Json到Kotlin)的插件 在使用Kotlin进行开 ...
- Android Kotlin Jetpack Compose UI框架 完全解析
前言 Q1的时候公司列了个培训计划,部分人作为讲师要上报培训课题.那时候刚从好几个Android项目里抽离出来,正好看到Jetpack发布了新玩意儿--Compose,我被它的快速实时打包给吸引住了, ...
- Android Kotlin协程入门
Android官方推荐使用协程来处理异步问题.以下是协程的特点: 轻量:单个线程上可运行多个协程.协程支持挂起,不会使正在运行协程的线程阻塞.挂起比阻塞节省内存,且支持多个并行操作. 内存泄漏更少:使 ...
- Android Kotlin Annotation Processer
Annotation Processer 注解处理器(Annotation Processer)是javac内置的注解处理工具,可以在编译时处理注解,让我们自己做相应的处理.比如生成重复度很高的代码, ...
- Android 创建单例模式的几种方法
java模式之单例模式:单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例.特点:1,一个类只能有一个实例2,自己创建这个实例3,整个系统都要使用这个实例 Singleton模式 ...
- android kotlin Gradle DSL method not found: '1.2.51()'错误,be using a version of the Android Gradle plug-in that does not contain the method (e.g. 'testCompile' was added in 1.1.0).
同步的时候遇到这个问题,从log上看是因为gradle的版本不包含kotlin 1.2.51这个method,具体原因我也不是很清楚,大概猜测是kotlin版本的问题,而最新的版本就是1.2.51,所 ...
- Android Kotlin开发之使用Butterknife注意要点
使用kotlin-kapt插件 依赖由java的annotationProcessor改为kapt 在使用控件绑定使用时,网上搜使用方法,不知道被哪个家伙带坑里了. //错误用法 @BindView( ...
- Android Kotlin 连接 http
由于近期网上搜索了很多Android连接到http的方法, 可是2013年以前的方法现在都不能用了,要么报错,要么被遗弃,岁月留下来的东西只能自己整理了. 其实很简单,就一个HttpUtil通用类.可 ...
随机推荐
- ASCII码表以及不同进制间的O(1)转换
ASCII码表以及不同进制间的O(1)转换 一.ASCII码表 ASCII全称为American Standard Code for Information Interchange, ...
- openssl 连接 https(nginx)
参考源码路径 demos\ssl #include <stdio.h> #include <string.h> #include <stdlib.h> #incl ...
- UVA 10821 Constructing BST
BST: binary search tree. 题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemi ...
- CXF wsdl2java (转载)
2011-03-28 14:27 9735人阅读 评论(2) 收藏 举报 servicewebserviceinterfacejavastringserver CXF wsdl2Java 一. 简介 ...
- Python 使用for...in...和 while 循环 实现8种格式的 九九乘法表
#九九乘法表 for...in .. #左下角 for i in range(1,10): for j in range(1,i+1): print(' %d×%d=%2d'%(j,i,i*j), e ...
- oracle的常用99条语句
1. select * from emp; 2. select empno, ename, job from emp; 3. select empno 编号, ename 姓名, job 工作 fro ...
- 服务器重复发送SYN ACK 和 TCP_DEFER_ACCEPT设置
现象: 以下为其他网站提供,和我遇到的情况一样. 就是服务器老是重复发送 SYN, ACK. 4414.229553 client -> server TCP 62464 > http ...
- 可以用WebRTC来做视频直播吗?
https://www.zhihu.com/question/25497090 作者:韦易笑链接:https://www.zhihu.com/question/25497090/answer/72 ...
- NOIP水题测试(2017082501)
日常水题测试又来了! 以后答案都以单题形式公布. 下面看今天的水题: 时间限制:5小时 题目一:无法形容的水 题目二:比上一题还水 题目三:一元三次方程求解 题目四:单词接龙 题目五:统计单词个数 题 ...
- 数组方法splice
删除功能: 语法:arrayObject.splice(index,count) 功能:删除从index处开始的零个或多个元素. 返回值:含有被删除的元素的数组 说明:count是要删除的项目数量,如 ...