00:02
命令模式的注意事项和细节,我们来看一下。我们在使用命令模式的时候呢,我们需要注意这样一些问题,首先我们要明白命令模式的价值,它的价值呢是把这个发起请求的对象和执行请求对象解耦,这是他的核心思想。那么发行起求的呢?我们称之为调用者,调用者只要调用命令对象的SQ的方法就可以了。我们说的是标准的哈,而不必知道具体的接收者是谁,是如何实现的。也就是说命令模式呢,它是把请求发起者和请求执行者接入。而我们的命令对象,它起到一个桥梁的作用,也就是说我们命令对象把什么呢,把接收者和你发布的这个命令怎么样聚聚合在一起,起到一个桥梁。好,那么经用我们这个命令模式呢,其实我们可以比较容易的设计一个命令的队列。把命令。
01:02
把命令对象放到队列中,就可以执行多线程的执行,这也是比较方便的。还有一点呢,我们要看到命令模式,它是比较容易实现对请求的撤销,大家还记不记得我们在写。这个开灯关灯开电视,关电视的时候,我们其实是写了一个undo。的一个操作,还是比较容易实现命令模式的,不足的地方我要点出来。命令模式呢,可能导致某些系统有过多的具体的命令类,因为你是一个接口command,那下面如果我们命令很多。对不对,他有很多,你比如说像我们前面讲的这个智能家庭项目,你有TVTV下面就包含了两个命令。而我们的net电灯,它又包含了两个命令,打开和关闭。是不是如果我们再加一个,就是就是那种,呃,电灯不是还有一些打开,然后。那个灯光很暗的那种。
02:02
是吧,又是一种命令。那当然,你的电器还有很多其他的,比如电冰箱。对不对,还有空调是不是又得加相应的命令,所以说这样呢,它可能会有很多的具体的命令类,就增加了系统的复杂度,这点需要同学们注意。但是不可否认啊,就是因为他这种方式解耦了过后呢,虽然你你的这个具体的命令类比较多,但是仍然是感觉到不是很乱。对不对。还有一点就是空命令,它也是一种设计模式,大家还记不记得我们在写前面的智能家居、智能家庭管理的时候,我们有个no command。这个no command呢,它其实是一种空命令,也也算是一种设计模式,它为我们省去了判空的操作。在上面实际中如果我们没有空命令,我们每按下按钮都要判断它有没有。每按一个按钮都要判断它是不是一空就给我们带来带来麻烦,现在不需要了,它它这个空命令也是一种命令,那我就把状态一切换就行了。
03:06
那么命令模式它今年的应用场景呢?一般像这个SD里面DOS命令或者订单的撤销、恢复、触发等机制都可以用到命令模式的设计。好的,那关于命令模式细节聊到这,我们把命令模式的内容进行一个简单的梳理,同学们看一下我们怎么讲的。来打开我们的笔记,捋一捋我们讲的命令模式的具体内容,梳理一下。这是我们讲的命令模式。OK。模式。我们讲的命令模式。那命令模式我们是怎么讲的呢?首先我们先看了一个智能生活项目的具体需求,引出了我们要讲解的内容,是不是啊,具体来说呢,是看了一个需求。看了这么一个智能生活家庭的需求,对不对?我把这个图拿过来吧。
04:03
这里呢,我给它编一个号。这个图我们拿过来,大家一看到这个图就想起来了。我再捋一捋。好的,那现在有了这样一个提供呢,我们我们就没有说用传统的方法去解决了,我们直接对命令模式做了一个基本的介绍来看一下。命令模式呢,我们做了基本的介绍,怎么介绍的一共有这么四点。是吧,同学们。好四点,我把这四点呢给同学们摆一下。这四点给同学们板述一下。好大题,就这样子四点。那这里面我们可以看到。他的核心思想还在这儿再强调,强调请求的发送者和请求街舞。哦,这已经说了很多遍了。接着再往下面看,为了增强大家对命令模式的理解呢,我们画了命令模式的原理类图,并且对原理类图里面包含的命令模式的角色我们做了一些说明。
05:08
是吧,这个图大家一定要记住好吗?图你要不记住的话呢,很容易慢慢就忘掉了。原理图,下面是对他的几个角色的说明。好,这就比较清晰了,然后我把这个图给同学们板过来。好的,放这儿哈。往上提一提。好,这是我们对命令模式原理类图的说明,那紧接着呢,我们就用命令模式来完成了智能生活这个项目,是不是就是做了一个遥控器?咱做了一个遥控器,那具体来说我们是怎么做的呢?看一下我们的思路。我把整体这个流程给大家捋一捋。对吧,一共呢,分了三步来完成,首先第一步我们说了一下这个需求,需求前面已经提到了,就不多说,我们画了一个类图,打开我们eclipse,把内图拿过来,我们在哪画的呀。
06:05
找到我们design的这个项目。是在这个地方画的,如果没有,没有记错,是这个地方。是不是,所以你看有一个图自己再去画一遍,我我想多少来说,对大家理解这个设计项目呢,还是比较有帮助的,不然你你听着听着很乱,学的也完全没有,嗯,完全不清晰,所以说我尽量呢,每个地方画一个图,这个图确实在一定程度上可以。降低我们对学习设计模式的难度。啊,因为这个图它比较容易一看就明白了嘛。好的,我然后把command这一个代码给大家打一个压缩包放过来就行了,因为文件太多了。好,压缩包。大压缩包。诶,为什么不出来呢?刷新一下。好,我把压缩包呢给各位朋友放到我们的这个位置。
07:04
当我们把这个代码写完了以后,是不是为了增强大家对命令模式的理解,我们是不是讲一下spring框架里面JD bc complete。源码的应用,而且我也强调了,我们在看源码的时候呢,要追求这种设计模式的它的精髓核心,而不要完全去说,诶那跟他有点不一样,这是有可能的,知道吧,你不能说诶老师讲的是那种跟这个有点出入,你就认为不是了,这样是不对的。因为我在这种反复强调一种第这个设计模式啊,它难就难在它是一种思想,它并没有明确说你必须怎么怎么样。所以它有一些微小的差异是有可能的。代码分析呢,我就给同学们把这个幻灯片的截图拿过来。我就不在那个代码里面一个个截了。好,这是我们对代码的一个整理,最后呢。我们对这个角色进行了一个分析,是不是后边有一个。
08:03
对角色我们进行一个说明。来看一下。好往下看哦,这个不行,这样子。啊,这个地方他角色分析说明。然后这边呢,我们就不要了哈。这边我们该换一个图标。换成这个小点吧,换成小点就可以了。那么这边我们总结了他的几个角色是怎么回事,诶,这个地方。也得换一个小图标好吧。诶还不行,这样子有问题。这个地方我们换一个,看看这样子能换成功不好,换成功了。好可以了,有这四点四点,那最后呢,同学们可以看到。呃,这还有个这个图也给他截过来。对吧,然后最后我们还做了一件什么事情呢,就是给大家梳理一下命令模式使用的细节,就是哪个地方要注意呢?就是我们命令模式呢,有可能会造成过多的具体的命令类,增加了复杂度,这个地方大家一定要注意。
09:07
啊,就是你看你在实际开发中需不需要,有没有,如果很多的情况下,你需不需要去选择,自己要去琢磨一下这事。好,我把这个呢也给大家列到这儿。对,所以说命令模式的不足之处我也点出来了,还有一点呢,我们在设计模式的有一种有一种空命令,它也是一种设计模式,它的好处是代表干什么呢?如就是说如果我们有空命令的话,就省去了判断空的操作。因为它也是种命令嘛,它切换一个状态就行了,不然的话你会判断诶当前是不是空的,然后怎么怎么样,太麻烦了。好,同学们,那关于命令模式的内容我们就梳理到这里,大家好好理解一下。
我来说两句