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

描述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. Luogu 2059 [JLOI2013]卡牌游戏 - 概率DP

    Solution 设状态 $F[i][j] $为 还剩余 $i$ 个人时, 第 $j$ 个人 的胜率. 边界: $F[1][1] = 1$(只剩下一个人了). 这样设置状态就能使 $i-1$ 个人的答 ...

  2. RTTI(运行时类型识别)

    运行时类型识别(Run-time type identification , RTTI),是指在只有一个指向基类的指针或引用时,确定所指对象的准确类型的操作.其常被说成是C++的四大扩展之一(其他三个 ...

  3. JeeSite 4.0

    http://jeesite.com/ JeeSite 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot.Spring MVC.Apache Shiro.MyBat ...

  4. JDK 之 Java Bean 内省机制

    JDK 之 Java Bean 内省机制 JDK 规范目录(https://www.cnblogs.com/binarylei/p/10200503.html) JavaBean 是一种特殊的 Jav ...

  5. 如何利用Photoshop进行快速切图

    在UI设计中我们常常使用Ai来进行矢量图的绘制,然后导入Ps中进行设计.排版和导出. 在以前的版本中,切图一直是个很麻烦的事情,要么依托于脚本,要么手动一张张导出,很不方便,这种窘况在Photosho ...

  6. 关于使用的xshll和xftp中乱码咋办?

    1.Xshll中 2.Xftp中同理都是一样的设置

  7. 利用PHP脚本辅助MySQL数据库管理5-检查异常数据

    <?php $dbi = new DbMysql; $dbi->dbh = 'mysql://root:mysql@127.0.0.1/coffeetest'; $map = array( ...

  8. HACK字体安装

    参考:https://github.com/source-foundry/Hack Linux的 下载最新版本的Hack. 从存档中提取文件(.zip). 将字体文件复制到系统字体文件夹(通常/usr ...

  9. 【Ruby】ruby安装

    Ruby简介 Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License.它 ...

  10. hdu--6178(多校

    题意:要在一棵 n 个点的树上放 k 只猴子,然后删掉尽量多的边,使得删边后,每只猴子都至少和另外一只猴子相连,问最后剩下的边数. 思路:其实dfs遍历一次看有多少个点-边-点就好了,比赛的时候就觉得 ...