門面模式--招個助理一條龍服務

這次介紹門面模式,主旨思想就是客戶端通過一個統一的對象,完成一系列任務。而客戶端是不用知道每一個任務的具體實現和順序。可以理解爲門面對象整理好一系列任務,我們直接調用就行。

自從開了彩筆廠後,大熊每日的工作日漸繁忙,各種工作,應酬,交際,應接不暇。每天忙的暈頭轉向。

我們先看一下大熊自己怎麼安排一天的工作

大熊是彩筆廠的老闆(Boss)

class Boss {
    //工作
    fun work(workInfo: String) {
        println("boss 去 $workInfo")
    }
}

一天的工作計劃

interface Work {
    fun doWork(boss: Boss)
}
//一天的行程計劃表
class WorkOne : Work {
    override fun doWork(boss: Boss) {
        boss.work("開會")
    }
}
class WorkTwo:Work{
    override fun doWork(boss: Boss) {
        boss.work("飯局")
    }
}
class WorkThree:Work{
    override fun doWork(boss: Boss) {
        boss.work("去工廠考察")
    }
}
class WorkFour : Work {
    override fun doWork(boss: Boss) {
        boss.work("趕飛機出差")
    }
}

大熊的一天開始了

fun main(args: Array<String>) {
    //一天的開始

    //大熊起牀
    var boss = Boss()

    //自己打開工作計劃表
    var work1 = WorkOne()
    var work2 = WorkTwo()
    var work3 = WorkThree()
    var work4 = WorkFour()

    //安排自己的工作
    work1.doWork(boss)
    work2.doWork(boss)
    work3.doWork(boss)
    work4.doWork(boss)
}
------------------------------------------------
logcat:
boss 去 開會
boss 去 飯局
boss 去 去工廠考察
boss 去 趕飛機出差

如果大熊要修改工作安排,就得不停的切換workList。從代碼上來說,就是把所有具體方法都暴露出來,客戶端就需要知道每個方法的具體實現。這就導致了代碼過渡耦合,客戶端和具體實現方法的複雜度大大提高了。

爲了解決這種情況,大熊決定找個助理,讓他每天幫忙安排工作議程。

這樣,我們的門面對象(Assistant)就出來了

class Assistant{

    //助理列出了一天的工作
    var work1 = WorkOne()
    var work2 = WorkTwo()
    var work3 = WorkThree()
    var work4 = WorkFour()

    //安排
    fun plan(boss: Boss){
        //提醒boss做第一條工作
        work1.doWork(boss)

        work2.doWork(boss)
        work3.doWork(boss)
        work4.doWork(boss)
    }
}

大熊招了助理後,新的一天

fun main(args: Array<String>) {
    //一天的開始

    //大熊起牀
    var boss = Boss()

    //把助理叫過來
    var assistant = Assistant()

    //讓助理安排自己的工作
    assistant.plan(boss)
}

大熊再也不會因爲工作議程忙的焦頭爛額

至此,門面模式的優勢就體現出來了

把一堆功能都交給門面對象來處理,客戶端只需調用門面對象。在門面對象中修改處理流程,都不會影響客戶端,也就實現了簡單的解耦。

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