[5] —— 委托模式 - 一個管理人員的一天

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

舉個例子,一個公司有普通員工、財務(wù)人員、管理者三個角色,管理者可以調(diào)用普通員工進(jìn)行某項工作,可以派財務(wù)人員給某個員工開支??梢钥闯銎渲泄芾碚卟⒉粫M(jìn)行某項具體的工作,而是由各個人員來完成各自的工作。

UML

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

在 Kotlin 中實(shí)現(xiàn)委托十分方便,我們需要用到一個新的關(guā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{
}

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

image

你可能會疑惑為什么要使用委托,代碼編寫有個這樣的原則:能不用繼承就不用繼承,能使用委托實(shí)現(xiàn)的就不使用繼承。兩個類有明顯示的層級關(guān)系時使用繼承,沒有明顯的層級關(guān)系,僅僅是為了在一個類中使用另一個類的方法時應(yīng)該使用委托。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 面向?qū)ο缶幊蹋∣OP) 在前面的章節(jié)中,我們學(xué)習(xí)了Kotlin的語言基礎(chǔ)知識、類型系統(tǒng)、集合類以及泛型相關(guān)的知識。...
    Tenderness4閱讀 4,622評論 1 6
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,740評論 18 399
  • 吃“草”是不可能的!這輩子都不可能吃“草”的! 就和導(dǎo)語說的一樣,我是一個拒絕吃“草”的人。 因此,即便是減重期間...
    螭印閱讀 290評論 0 0
  • 又是很久很久沒寫文兒,今天的確克制不住我內(nèi)心的洪荒之力,必須寫出來,哪天看看一定能笑一笑! 事情是這樣的: 很久之...
    英倫小兔子閱讀 498評論 1 2
  • 小李很多時候他真的很迷茫,他來自農(nóng)村今年二十四了,大學(xué)畢業(yè)以來他,并沒有工作走上了創(chuàng)業(yè)的道路,但同時走上了不歸...
    時空偷獵者閱讀 128評論 0 0

友情鏈接更多精彩內(nèi)容