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通用类.可 ...
随机推荐
- POJ 3041.Asteroids 最小顶点覆盖
Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22905 Accepted: 12421 Descr ...
- Linux 双网关(电信与联通)
经常有这种需求,一台Linux服务器配置电信IP和网通IP,默认情况下,后启动的网卡的网关生效.南电信北网通,配置电信和网通IP,无非是为了减少网络延时,使电信用户的请求响应在电信网络中传输,网通用户 ...
- 工具类Utils的单元测试方式
数据质量功能已经开发完毕,但是要实现单元测试覆盖率80%以上,其他的还好,只是这个工具类实在让我摸不着头脑,其实工具类的单元测试是最简单的,只是自己想复杂了而已: 无返回值模拟: 有返回值模拟: 异常 ...
- css字符串转换为类map对象及反转
存储对象为啥是类map(即:{key:val,...}格式),因为Map对象的val为字符时,无法存储 '('.')' 左右括号,我也很无奈╮(╯▽╰)╭ 解析脚本: <!DOCTYPE htm ...
- Google Reader 快关了!!
现在还每天用Google Reader, 每次打开都提示7月1号要关闭... 上图怀念: 控制区功能:排序.展开\收缩显示.上一条\下一条,还有下拉框下的很多功能... 列表显示 针对每个Item下的 ...
- Bubble(冒泡排序)————Java
用Java进行冒泡排序的代码,利用一个flag进行优化算法: import java.util.Scanner; public class Bubble_Sort { private static i ...
- WebSocket的原理与优缺点
websocket 是长连接,受网络限制比较大,需要处理好重连,比如用户进电梯或电信用户打个电话网断了,这时候就需要重连,如果 ws 一直重连不上,有些较复杂的业务方会不愿意的,是不是还要搞个 htt ...
- (4)4 larger-than-life lessons from soap operas
https://www.ted.com/talks/kate_adams_4_larger_than_life_lessons_from_soap_operas/transcript 00:12In ...
- TCP/IP协议(2):各层网络设备
一.中继器(Repeater) 中继器工作在OSI的一层物理层,我们知道,超5类线的传输距离最大为100米,超过这个距离信号就会衰减,中继器就是为了防止信号变差,将网络信号进行再生和重定时. 二.集线 ...
- Linux下启动tomcat报错RROR org.apache.catalina.core.StandardContext- Error starting static Resources java.lang.IllegalArgumentException: Document base /home/duiba/apache-tomcat/webapps/../webapps/manager do
部署项目的时候,重启tomcat,死活起不来,很郁闷,网上巴拉了半天,结合自己的情况,找到了原因: 错误日志信息: 2018-12-13 13:52:26,992 [main] INFO org.ap ...