本文适合有 java 基础的同学,有学习 kotlin 的同学欢迎一起来,有问题可在文末留言。
场景描述
现在有一个项目需要外包出去,于是就找了中间人,负责将项目外包并按期交付,而这个中间人就获得了第一个项目报价,而中间人又不会写代码,于是,他去找了程序员,给出了第二次报价,就等着接收项目交付结果了。
分析:
这里“发出需求的”就符合接口的含义(提供与外界事物交互实现某个操作而不影响其内部的其他功能),所以定义一个接口,中间人就可以抽象为代理商,而后面不管经过几首,都认为是写程序的人,这样就是一个代理形式场景,下面用 Kotlin 代码来实现。
接口定义
/**
* 接口 有项目需要外包
*/
interface GetMoneyFromProject {
fun wbProject()
}
说明:在 Kotlin 中定义接口,依然使用 interface 关键字。
代理人定义
/**
* 将 ProgrammerTwo 修改为始终单实例
*
* 需要将类 ProgrammerTwo 的 class 替换为 object 修饰符
*
*/
class ProgrammerOne : GetMoneyFromProject by ProgrammerTwo {
override fun wbProject() {
println("我是中间人,我负责项目的外包和初次验收工作")
// 只有一个实例,不再需要使用构造方法方法其函数
ProgrammerTwo.wbProject()
}
}
说明:这里的“代理人”类实现了“需要项目被外包的人”接口,并通过关键字 by 委托这件事情给“写代码的程序员”去做。自己实现了接口中的方法,说明一些外包的具体的事宜,比如,何时开始项目实施,何时收工,以及报款等等操作。
程序员类
/**
* 最后写代码的程序员
*
* object 可保证该实例在内存中只有一个
*/
object ProgrammerTwo : GetMoneyFromProject {
override fun wbProject() {
println("到这是二手了,报价2W.可以赚外快了")
}
}
说明:这里的类 ProgrammerTwo 被关键字 object 所修饰,也就意味着在定时的时候就创建了一个对象,也就是单例的体现,该类的成员可通过类名类访问。
运行结果:
fun main(args: Array<String>) {
var p1 = ProgrammerOne()
p1.wbProject()
}
// 运行结果
我是中间人,我负责项目的外包和初次验收工作
到这是二手了,报价2W.可以赚外快了
说明:场景具体用代码实现。这里注意几个细节:
-
类实现接口依然使用 :
-
接口后面不需要括号
-
委托使用关键字 by
-
类定义单例(唯一实例)使用 object 修饰
sealed class 密封类
sealed 类,为父类添加一个 sealed 修饰符,对可能创建的子类做出严格的限制。所以子类必须嵌套在父类中,也就是说密封类不能再去外部拥有子类。需要注意:被 sealed 所修饰的类,默认就是一个 open 类,不再需要显示地添加 open 。下面以之前学习过的 when 表达式举例说明:
/**
* sealed 关键字所修饰的类:
*
* 其子类默认不能出现在其外部;默认是 open
*/
sealed class Company {
class PM(var elevel: Int) : Company()
class Programmer(var ide: String) : Company()
}
fun test(c: Company) {
when (c) {
is Company.PM -> println(c.elevel)
is Company.Programmer -> println(c.ide)
// 这里列举完了所有情况,所有 else 分支可以不写
}
}
fun main(args: Array<String>) {
var company1 = Company.PM(5)
var company2 = Company.Programmer("IDEA")
test(company1)
test(company2)
}
说明:如果我们不适用 sealed 来定义类,而是使用接口的形式,那么我们的表达式 when 则必须有默认分支 else ,否则编译器报错,但是如果使用 sealed 来修饰,因为限定了数量,所以无需写 else 分支。
enum 枚举
// 定义枚举
enum class Weeks {
星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六
}
枚举和密封类的区别
枚举:重点强调数据,可列举,统一使用。
sealed calss:重点强调数量,突出对数量的限制。
说件事情
-
初创的技术+生活圈子现在加入人数没有上限了,想加入的在公众号底部菜单自行加入。有什么问题可在哪里随时提问,发表状态。
-
年前本公众号会做一次送书活动,书籍会有热门的人工智能,架构,编程语言,条件很简单,只要你经常留言啊,点赞啊,分享文章啊之类的,总之能活跃在每篇文章的视线范围内,就有机会优先获得。