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通用类.可 ...
随机推荐
- Luogu 2059 [JLOI2013]卡牌游戏 - 概率DP
Solution 设状态 $F[i][j] $为 还剩余 $i$ 个人时, 第 $j$ 个人 的胜率. 边界: $F[1][1] = 1$(只剩下一个人了). 这样设置状态就能使 $i-1$ 个人的答 ...
- RTTI(运行时类型识别)
运行时类型识别(Run-time type identification , RTTI),是指在只有一个指向基类的指针或引用时,确定所指对象的准确类型的操作.其常被说成是C++的四大扩展之一(其他三个 ...
- JeeSite 4.0
http://jeesite.com/ JeeSite 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot.Spring MVC.Apache Shiro.MyBat ...
- JDK 之 Java Bean 内省机制
JDK 之 Java Bean 内省机制 JDK 规范目录(https://www.cnblogs.com/binarylei/p/10200503.html) JavaBean 是一种特殊的 Jav ...
- 如何利用Photoshop进行快速切图
在UI设计中我们常常使用Ai来进行矢量图的绘制,然后导入Ps中进行设计.排版和导出. 在以前的版本中,切图一直是个很麻烦的事情,要么依托于脚本,要么手动一张张导出,很不方便,这种窘况在Photosho ...
- 关于使用的xshll和xftp中乱码咋办?
1.Xshll中 2.Xftp中同理都是一样的设置
- 利用PHP脚本辅助MySQL数据库管理5-检查异常数据
<?php $dbi = new DbMysql; $dbi->dbh = 'mysql://root:mysql@127.0.0.1/coffeetest'; $map = array( ...
- HACK字体安装
参考:https://github.com/source-foundry/Hack Linux的 下载最新版本的Hack. 从存档中提取文件(.zip). 将字体文件复制到系统字体文件夹(通常/usr ...
- 【Ruby】ruby安装
Ruby简介 Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License.它 ...
- hdu--6178(多校
题意:要在一棵 n 个点的树上放 k 只猴子,然后删掉尽量多的边,使得删边后,每只猴子都至少和另外一只猴子相连,问最后剩下的边数. 思路:其实dfs遍历一次看有多少个点-边-点就好了,比赛的时候就觉得 ...