门面模式--招个助理一条龙服务

这次介绍门面模式,主旨思想就是客户端通过一个统一的对象,完成一系列任务。而客户端是不用知道每一个任务的具体实现和顺序。可以理解为门面对象整理好一系列任务,我们直接调用就行。

自从开了彩笔厂后,大熊每日的工作日渐繁忙,各种工作,应酬,交际,应接不暇。每天忙的晕头转向。

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

大熊是彩笔厂的老板(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)
}

大熊再也不会因为工作议程忙的焦头烂额

至此,门面模式的优势就体现出来了

把一堆功能都交给门面对象来处理,客户端只需调用门面对象。在门面对象中修改处理流程,都不会影响客户端,也就实现了简单的解耦。

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