来自kotlin的委托助力

169 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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参数传递给我们称为 HelperIntermediary类,输出的结论是中介将帮助客户进行房产购置。

---- 我是客户,我需要买一套性价比很高的房子,自住+投资!但是我只有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层看着没那么难受。如果你正深受嵌套继承的伤害,那就行动起来吧!