这次介绍门面模式,主旨思想就是客户端通过一个统一的对象,完成一系列任务。而客户端是不用知道每一个任务的具体实现和顺序。可以理解为门面对象整理好一系列任务,我们直接调用就行。
自从开了彩笔厂后,大熊每日的工作日渐繁忙,各种工作,应酬,交际,应接不暇。每天忙的晕头转向。
我们先看一下大熊自己怎么安排一天的工作
大熊是彩笔厂的老板(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)
}
大熊再也不会因为工作议程忙的焦头烂额
至此,门面模式的优势就体现出来了
把一堆功能都交给门面对象来处理,客户端只需调用门面对象。在门面对象中修改处理流程,都不会影响客户端,也就实现了简单的解耦。
网友评论