委托模式:委托模式是軟件設計模式中的一項基本技巧摩渺。
在委托模式中,有兩個對象參與處理同一個請求错蝴,接受請求的對象將請求委托給另一個對象來處理洲愤。
舉個例子,一個公司有普通員工顷锰、財務人員柬赐、管理者三個角色,管理者可以調用普通員工進行某項工作官紫,可以派財務人員給某個員工開支躺率÷杲纾可以看出其中管理者并不會進行某項具體的工作,而是由各個人員來完成各自的工作悼吱。
我們可以指派管理者去做某項工作慎框,或是給某個員工開支,這些具體工作由管理者委托給具體的某個實例來完成后添,這就是委托模式笨枯。
在 Kotlin 中實現(xiàn)委托十分方便,我們需要用到一個新的關鍵字 by
遇西,接口以及 User 馅精、Accountant 類沒什么可談的 我們直接來看看代碼吧:
open class User(var name: String="", var age:Int = 0):Work{
var nickname:String = ""
override fun doSomething() {
println("$name do something")
}
override fun callSomebody(guest: String) {
println("$name call $guest")
}
}
class Accountant(name:String, age:Int) : User(name, age), Finance {
override fun pay(maney: Int, user: User) {
println("$name pay $maney to ${user.name}")
}
}
class Manager(user: Work, accountant: Finance) : Work by user ,Finance by accountant{
}
是的,就是這么簡單的實現(xiàn)了委托模式粱檀,我們通過 by
關鍵字洲敢,將本該由 Manager 類實現(xiàn)的兩個接口交由各個接口的具體實現(xiàn)類來完成。在 Kotlin 中使用 by
關鍵字完成委托還需要注意一點茄蚯,即只有接口可以被 by
委托給某個對象压彭。
你可能會疑惑為什么要使用委托,代碼編寫有個這樣的原則:能不用繼承就不用繼承渗常,能使用委托實現(xiàn)的就不使用繼承壮不。兩個類有明顯示的層級關系時使用繼承,沒有明顯的層級關系皱碘,僅僅是為了在一個類中使用另一個類的方法時應該使用委托询一。