委托模式kotlin实战
什么是委托模式
委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。—- kotlin委托|菜鸟教程
场景实战
设想这样一个场景,你要参加一场同学会,希望在同学会上装杯,于是你想借朋友的车开。
你有两个朋友分别是开奥迪的朋友A和开宝马的朋友B,你可以选择找他们借车。
首先定义了汽车接口ICar
,包含两个方法:启动start()
和刹车brake()
interface ICar{
// 启动
fun start()
// 刹车
fun brake()
}
复制代码
ICar
有两个实现类分别为AUDI
和BMW
// 奥迪
class AUDI:ICar {
// 奥迪启动了
override fun start() {
println("AUDI start now")
}
// 奥迪刹车了
override fun brake() {
println("AUDI brake now")
}
}
// 宝马
class BMW:ICar {
// 宝马启动了
override fun start() {
println("BMW start now")
}
// 宝马刹车了
override fun brake() {
println("BMW brake now")
}
}
复制代码
然后定义朋友接口IFriend
包含借车方法getCar()
interface IFriend {
// 从朋友处借车
fun getCar():ICar
}
复制代码
IFriend
有两个实现类分别为朋友AFriendA
和朋友BFriendB
// 朋友A 有一辆奥迪
class FriendA():IFriend{
private val car = AUDI()
override fun getCar(): ICar {
return car
}
}
// 朋友B 有一辆宝马
class FriendB():IFriend{
private val car = BMW()
override fun getCar(): ICar {
return car
}
}
复制代码
你自己没有车,但是想开车去同学会,所以你需要借朋友的:
// 我自己没有车,得从外边借
class MyCar(private val carFromFriend:ICar):ICar{
override fun start() {
carFromFriend.start()
}
override fun brake() {
carFromFriend.brake()
}
}
复制代码
实际的场景像下面这样:
fun main() {
println("第一天")
// 首先:找朋友A借了辆车
val carFromFriendA:ICar = FriendA().getCar()
// 然后:假装这辆车是自己的车
var myCar:MyCar = MyCar(carFromFriendA)
// 接着开出去
myCar.start()
myCar.brake()
println("第二天")
// 然后第二天,又找朋友B借了车
val carFromFriendB: ICar = FriendB().getCar()
// 假装这辆车是自己的
myCar = MyCar(carFromFriendB)
// 开出去
myCar.start()
myCar.brake()
}
复制代码
控制台打印出来是下面这样的:
第一天
AUDI start now
AUDI brake now
第二天
BMW start now
BMW brake now
kotlin提供的委托特性
我们可以看到MyCar
类中的start()
和brake()
只是调用了代理类的同名方法并没有做其他的事情,kotlin提供了by
关键字能帮我们减少委托时的样板代码,我们可以重写MyCar
类:
// 我自己没有车,得从外边借
class MyCar(carFromFriend:ICar):ICar by carFromFriend{
}
复制代码
这里的by
语句表示,将 carFromFriend
保存在 MyCar
的对象实例内部,而且编译器将会生成继承自 ICar
接口的所有方法, 并将调用转发给 carFromFriend
。
最后附上Github链接,欢迎大家去看看。
Github链接 github.com/Junp3ng/Kee…
参考
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END