持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第28天,点击查看活动详情
定义
什么是委托?基于词汇 委派定义意味着,授权为他人行事的行为,责任的委派。一个常见的情况是当您告诉某人为您取外卖时。代表的定义是被授权代表他人发言或行事的代表。简而言之:将一项工作的责任交给另一人。
那么和 Kotlin 语言有什么关系?Kotlin 有一个属性叫做委托属性,这个属性的用途和什么词汇一样。Kotlin 代表可以将工作分配给另一个人。下面是我使用 TeamLead 和 TeamMember 概念的示例。
示例
interface Trade{
fun buyHouse()
}
我们有一个具有buyHouse()函数的Interface Trade(交易)类。之后,我们将这个接口实现到Customer(客户)类中,并重写buyHouse()函数。
// 客户
class Customer:Trade{
override fun buyHouse(){
println("我是客户,我需要买一套性价比很高的房子,自住+投资!但是我只有1w块!")
}
open fun bankCard(){
println("卡上余额:1元")
}
}
在已经定义了Customer类之后(确定了购房需求之后),我们将给某壳的购房顾问一个机会,让他来服务我们购买商品房。我们可以创建另一个实现了Trade接口类,并将Customer类型作为其参数传递的Intermediary(中介)类,这意味着其中一个职责将传递给另一个类。
// 中介
class Intermediary(val customer:Customer):Trade{
override fun buyHouse(){
customer.buyHouse()
println("我是中介,我需要服务$customer客户买到心仪的房子!")
}
}
当我们指定好中介进行购房后,我们需要签署一份委托协议书,声明是客户委托购房顾问进行有效的商业行为。
class Contract{
fun signature(){
val customer = Customer() // 购房者提供购房需求
val intermediary = Intermediary(customer) // 购房顾问进行购房商业行为
println("合同即日起生效,受法律保护")
}
}
日志输出是上面的结果,我们将Customer参数传递给我们称为 Helper 的Intermediary类,输出的结论是中介将帮助客户进行房产购置。
---- 我是客户,我需要买一套性价比很高的房子,自住+投资!但是我只有1w块!
---- 我是中介,我需要服务 xxx 客户买到心仪的房子!
---- 合同即日起生效,受法律保护
下面的代码实际上可以使用 Kotlin 的委托属性进行改进并减少行代码。删除样板并变成一条线。
class Intermediary(val customer:Customer):Trade by customer{
// 这里不能重写bankCard方法
// 因为委托者不知道委托对象情况,所以就不能调用委托对象的方法
override fun bankCard(){
println("我是客户,我需要买一套性价比很高的房子,自住+投资!但是我只有1w块!")
}
// 在覆写方法的内部,你不能调用`super`
// 因为委托方式的接口实现类并没有继承任何类.
override fun buyHouse(){
super.buyHouse()
}
}
目的与结果相同,只是减少了代码行。Kotlin 有几个关键字和 API 需要探索,例如 委托 属性。使用 Kotlin 委托的真实案例时,涉及到抽象和继承。结果基于上面的代码,客户可以委托购房顾问进行房产购置了。
总结
当我们在封装Base层的时候,我们可以借助kotlin的委托能力进行封装,这样会减少嵌套继承的问题,让我们的base层看着没那么难受。如果你正深受嵌套继承的伤害,那就行动起来吧!