Kotlin 核心编程 (63):面向对象 3.5.2

阅读数:6 2019 年 12 月 28 日 22:25

Kotlin核心编程(63):面向对象 3.5.2

(天生的单例:object)

内容简介
本书不是一本简单介绍 Kotlin 语法应用的图书,而是一部专注于帮助读者深入理解 Kotlin 的设计理念,指导读者实现 Kotlin 高层次开发的实战型著作。书中深入介绍了 Kotlin 的核心语言特性、设计模式、函数式编程、异步开发等内容,并以 Android 和 Web 两个平台为背景,演示了 Kotlin 的实战应用。
全书共 13 章,分为 4 个部分:
热身篇—Kotlin 基础(第 1~2 章),简单介绍了 Kotlin 设计哲学、生态及基础语法,其中包括 Kotlin 与 Scala、Java 之间的关联与对比,以及 Kotlin 的类型声明的特殊性、val 和 var 的使用、高阶函数的使用、面向表达式编程的使用、字符串的定义与操作等内容;
下水篇—Kotlin 核心(第 3~8 章),深入介绍了面向对象、代数数据类型、模式匹配、类型系统、Lambda、集合、多态、扩展、元编程等 Kotlin 开发核心知识,这是本书的重点,其中涉及很多开发者特别关心的问题,比如多继承问题、模式匹配问题、用代数数据类型抽象业务问题、泛型问题、反射问题等。
潜入篇—Kotlin 探索(第 9~11 章),探索 Kotlin 在设计模式、函数式编程、异步和并发等编程领域的应用,其中包括对 4 大类设计模式、Typeclass 实现、函数式通用结构设计、类型替代异常处理、共享资源控制、CQRS 架构等重点内容的深入剖析;
遨游篇—Kotlin 实战(第 12~13 章),着重演示了 Kotlin 在 Android 和 Web 平台的实战案例,其中涉及架构方式、单向数据流模型、解耦视图导航、响应式编程、Spring 5 响应式框架和编程等内容。

单例模式最大的一个特点就是在系统中只能存在一个实例对象,所以在 Java 中我们必须通过设置构造方法私有化,以及提供静态方法创建实例的方式来创建单例对象。比如,现在我们要创建一个数据库配置的单例对象:

复制代码
public class DatabaseConfig {
private String host;
private int port;
private String username;
private String password;
private static DatabaseConfig databaseConfig = null;
private static String DEFAULT_HOST = "127.0.0.1";
private static int DEFAULT_PORT = 3306;
private static String DEFAULT_USERNAME = "root";
private static String DEFAULT_PASSWORD = "";
private DatabaseConfig(String host, int port, String username, String password) {
this.host = host;
this.port = port;
this.username = username;
this.password = password;
}
static DatabaseConfig getDatabaseConfig() {
if (databaseConfig != null) {
return databaseConfig;
} else {
return new DatabaseConfig(DEFAULT_HOST, DEFAULT_PORT, DEFAULT_USERNAME, DEFAULT_PASSWORD);
}
}
}

这是用 Java 实现的一个最基本单例模式的精简例子(省略了多线程以及多种参数创建单例对象的方法)。它依赖 static 关键字,同时还必须将构造方法私有化。

在 Kotlin 中,由于 object 的存在,我们可以直接用它来实现单例,如下所示:

复制代码
object DatabaseConfig {
var host: String = "127.0.0.1"
var port: Int = 3306
var username: String = "root"
var password: String = ""
}

是不是特别简洁呢?由于 object 全局声明的对象只有一个,所以它并不用语法上的初始化,甚至都不需要构造方法。因此,我们可以说,object 创造的是天生的单例,我们并不需要在 Kotlin 中去构建一个类似 Java 的单例模式。由于 DatabaseConfig 的属性是用 var 声明的 String,我们还可以修改它们:

复制代码
DatabaseConfig.host = "localhost"
DatabaseConfig.poet = 3307

由于单例也可以和普通的类一样实现接口和继承类,所以你可以将它看成一种不需要我们主动初始化的类,它也可以拥有扩展方法,有关扩展的内容将会在后面章节讲解。单例对象会在系统加载的时候初始化,当然全局就只有一个。那么,object 声明除了表现在单例对象及上面的说的伴生对象之外,还有其他的作用吗?它还有一个作用就是替代 Java 中的匿名内部类。下面我们就来看看它是如何做的。

Kotlin核心编程(63):面向对象 3.5.2

购书地址 https://item.jd.com/12519581.html?dist=jd

评论

发布