委託模式 - 一個管理人員的一天

委託模式:委託模式軟件設計模式中的一項基本技巧。
在委託模式中,有兩個對象參與處理同一個請求,接受請求的對象將請求委託給另一個對象來處理。

舉個例子,一個公司有普通員工、財務人員、管理者三個角色,管理者可以調用普通員工進行某項工作,可以派財務人員給某個員工開支。可以看出其中管理者並不會進行某項具體的工作,而是由各個人員來完成各自的工作。

UML

我們可以指派管理者去做某項工作,或是給某個員工開支,這些具體工作由管理者委託給具體的某個實例來完成,這就是委託模式。

在 Kotlin 中實現委託十分方便,我們需要用到一個新的關鍵字 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{
}

是的,就是這麼簡單的實現了委託模式,我們通過 by 關鍵字,將本該由 Manager 類實現的兩個接口交由各個接口的具體實現類來完成。在 Kotlin 中使用 by 關鍵字完成委託還需要注意一點,即只有接口可以被 by 委託給某個對象。

image

你可能會疑惑爲什麼要使用委託,代碼編寫有個這樣的原則:能不用繼承就不用繼承,能使用委託實現的就不使用繼承。兩個類有明顯示的層級關係時使用繼承,沒有明顯的層級關係,僅僅是爲了在一個類中使用另一個類的方法時應該使用委託。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章