命令模式
是什么
命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求队列或记录请求日志,以及支持可撤销的操作。
为什么
我们以机器人为例。有的机器人是可以使用遥控器去操作的,在遥控器上按唱歌键,机器人就会唱歌。在遥控器上按跳舞键,机器人就会跳舞。那怎么通过编程的。不经思考,大家肯定会这样想,编几个if else语句不就可以了吗?那好,如果有一天机器人又有一个新功能,让他打扫房间,那怎么办呢?大家会说,那还不简单,直接加一个if else条件不就可以了吗?可以仔细想想,这是不是又违反了开放-封闭原则了呢?好的程序是要对扩展开放,对修改封闭的!所以,这时,命令模式就来了。他把对机器人所有的命令抽象成一个抽象命令,然后具体的像唱歌、跳舞这些具体命令继承抽象命令,遥控器的作用只是要求该命令执行这个请求,也就是传递这些参数(命令)给机器人,让机器人执行这个命令。这样,无论我们是想增加命令还是减少命令都可以通过具体命令继承抽象命令进行扩展,这样不仅很容易实现撤销和重做,而且还可以较容易的将命令记入日志。
结构图
职责链模式
是什么
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着 这条链传递该请求,直到有一个对象处理它为止。
其实职责链我们都再熟悉不过了,无论是在学校企业申请事情或东西,还是去政府机构处理什么东西,都要经过或长或短的职责链。其实职责链模式特别像我们在大米时代请假,如果是两小时以内的事假或病假我们会把审批直接传递到纪委那里,如果是两小时以上的假则要先传递到纪委那,纪委不能处理则传递到老师那,老师是最后申请人,拥有处理所有审批的权限,也就是只要是请求就一定给答复或解决。
使用职责链模式,接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构。结果是职责链可简化对象的相互连接,他们继续保持一个指向后继者的引用,而不需要保持它所有的候选接收者的引用,因此大大降低耦合度。
结构图