先看一个案例,非单例模式的案例:

描述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-单例模式的更多相关文章

  1. Android Kotlin —— 语言结合

    2017 Google I/O 大会开始就宣布,将Kotlin语言作为安卓开发的一级编程语言.        Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发.   Ko ...

  2. Android Kotlin适用小函数

    都是一些Android适用的Kotlin小函数. 1.点击空白隐藏键盘 //点击空白隐藏键盘 override fun onTouchEvent(event: MotionEvent): Boolea ...

  3. Android -------- kotlin插件神器Json直接生成javaBean

    这是一个data class从JSON字符串生成Kotlin 的插件,换句话说,是一个将JSON字符串转换为Kotlin data class(Json到Kotlin)的插件 在使用Kotlin进行开 ...

  4. Android Kotlin Jetpack Compose UI框架 完全解析

    前言 Q1的时候公司列了个培训计划,部分人作为讲师要上报培训课题.那时候刚从好几个Android项目里抽离出来,正好看到Jetpack发布了新玩意儿--Compose,我被它的快速实时打包给吸引住了, ...

  5. Android Kotlin协程入门

    Android官方推荐使用协程来处理异步问题.以下是协程的特点: 轻量:单个线程上可运行多个协程.协程支持挂起,不会使正在运行协程的线程阻塞.挂起比阻塞节省内存,且支持多个并行操作. 内存泄漏更少:使 ...

  6. Android Kotlin Annotation Processer

    Annotation Processer 注解处理器(Annotation Processer)是javac内置的注解处理工具,可以在编译时处理注解,让我们自己做相应的处理.比如生成重复度很高的代码, ...

  7. Android 创建单例模式的几种方法

    java模式之单例模式:单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例.特点:1,一个类只能有一个实例2,自己创建这个实例3,整个系统都要使用这个实例 Singleton模式 ...

  8. 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,所 ...

  9. Android Kotlin开发之使用Butterknife注意要点

    使用kotlin-kapt插件 依赖由java的annotationProcessor改为kapt 在使用控件绑定使用时,网上搜使用方法,不知道被哪个家伙带坑里了. //错误用法 @BindView( ...

  10. Android Kotlin 连接 http

    由于近期网上搜索了很多Android连接到http的方法, 可是2013年以前的方法现在都不能用了,要么报错,要么被遗弃,岁月留下来的东西只能自己整理了. 其实很简单,就一个HttpUtil通用类.可 ...

随机推荐

  1. LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配

    #2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  2. Pycharm的常用快捷将

    程序运行 Shift+alt+F10 执行程序 debug调试 Shift+alt+F9 Debug调试Shift + F9 对当前文件进行DebugF8 调试模式下 跳过F7 调试模式下 进入F9 ...

  3. 将某视图View转换为UIImage

    + (UIImage *)getSharedScreenView{ UIWindow *screenWindow = [[UIApplication sharedApplication]keyWind ...

  4. [RF] Robot Framework新手干货(转载)

    Robot Framework用法总结 Robot Framework完整流程学习系列一 Robotframework自动化新手常见问题总结--(基础篇)

  5. 日志分析工具、日志管理系统、syslog分析

    日志分析工具.日志管理系统.syslog分析 系统日志(Syslog)管理是几乎所有企业的重要需求.系统管理员将syslog看作是解决网络上系统日志支持的系统和设备性能问题的关键资源.人们往往低估了对 ...

  6. 一道区间DP的水题 -- luogu P2858 [USACO06FEB]奶牛零食Treats for the Cows

    https://www.luogu.org/problemnew/show/P2858 方程很好想,关键我多枚举了一次(不过也没多大关系) #include <bits/stdc++.h> ...

  7. 牛客训练二:处女座的签到题(STL+精度+三角形求面积公式)

    题目链接:传送门 知识点: (1)三个点,三角形求面积公式 (2)精度问题: double 15-16位(参考文章) float 6-7位 long long 约20位 int 约10位 unsign ...

  8. ant Design和ant Design mobile的使用,并实现按需加载

    1.全局安装yarn npm install -g create-react-app yarn 2.创建react项目,并用yarn start 运行 3.引入antd/引入antd-mobile y ...

  9. excel的小bug

    http://muchong.com/html/201710/3913047.html Excel也有相同现象,试着计算:exp(-1.5^2),exp(0-1.5^2),exp(-(1.5)^2)看 ...

  10. PuTTY乱码问题解决办法

    原文链接:http://www.henshiyong.com/archives/403.html 使用PuTTY 时,遇到了乱码问题,查看了别人介绍的信息,解决掉了. 方法其实很简单,现在分享出来. ...