设计模式简述续


前面讲了设计模式简述, 只说到了结构型模式,下面继续来说说行为型模式.

行为型(11个)

和上面结构型的分析一样,在了解各种模式之前,我需要问自己几个问题:行为是什么?它由哪几部分组成?都有哪些类型?

现行C语言国际标准ISO 9899:2011把行为定义为:程序的外部表现或动作。没什么参考价值啊!我觉得对一个行为问题的了解应该包括这几部分:行为目的、发起者、以什么方式、作用于谁、达到了什么效果。

它们必然蕴含在每一个行为型模式里面,从这几点出发,我们可以给行为分一下类。

从作用者分类:

1、   作用于自己就是内部行为:模板方法、状态、迭代、备忘录、策略、观察者

2、   作用于外部就是外部行为:职责链、命令、中介者、访问者、解释器

从这里可以看出来内部行为还是比外部行为多,为什么呢,可能还是分离的思想,各干各的事,能不协作就不要协作吧。

接下来我们看看内部行为,从目的上可以分为两种:

1、   更好的自我管理:模板方法、状态、策略

2、   为了方便和外部交流:迭代、备忘录、观察者

为什么说模板方法、状态、策略是自我管理呢?

模板方法就是放权的事,如果你是公司老总,只需要干战略和公司方向上的事就行了,具体的工作交给下面的人。

状态就是如果你今天感冒了就请假吧,好好休息;如果今天状态好,就多干点活。

策略说的就是有些活很难搞定,也不是公司的核心技术,就分出去,让别人干吧。

归纳一下自我管理的三点:什么行为要干,什么不要干,什么时候干。是不是还缺点什么,哦,对了,怎么没看见“怎么干”?那就涉及具体操作了,不是设计模式关心的事情。

接下来,我们看看为了和外部交流,设计模式都干啥了:

1、 我这里有信息,你来拿吧:迭代,备忘录

2、  主动送过去:观察者

迭代和备忘录的区别就是迭代是多个信息,方便外部顺序获取。观察者大家应该最熟悉,尤其是从事前端开发的,离不开观察者,到处是它的实例,我也不多说了。既然内部准备好了,也具备和外部交流的能力了,下一步就要把目光投向外部。

首先需要寻找“合伙人”。

1、   直接:职责链

2、   间接:中介者

职责链在直接找作用对象里面比较特殊,它不仅涉及到了找,还涉及到了找到后反悔怎么办。这里有一个例子,比如说需要找一个人办事,本来商量好了的,最后他不干了,也不能这么容易就放过他啊,不然损失谁负责阿,需要推荐一个人来接替他的工作,如果又不干了,继续推荐,直到找到肯干的人为止。

中介者就是把事情交给中介,让中介去协调、商量,省事。

找到“合伙人”之后,先沟通一下,互相明了这是一个什么事后,就可以商量怎么协作了,理论上可以有以下几种:

1、   我干我的,你干你的

2、   我不干,你干:访问者、命令

3、   我干,你不干

第3条虽然在理论上存在,但是如果千辛万苦找来一个人,什么都不干,那还找来干什么,基于这个思考,我觉得在第3条里没有对应的设计模式是可以理解的。但是第1条可以有啊,为什么没有呢?这就是我的不对啦,不能怪设计模式。因为我在上面已经剥离内部行为了,所以看不到“我干我的“,就只剩下”你干你的“。总体上看,第1条里应该包括观察者:专心做自己的事情,然后通过观察者,外部也可以调整行为。

“我不干,你干”又分成两种情况:

1、   我指导你干:命令

2、   毛遂自荐,你主动要求干:访问者

到现在只能再次感叹,GOF设计模式的确是总结的特别好,连这么小众、非主流的方面也想到了,如果让我们自己想,我是怎么想也想不出访问者这种厚脸皮行为的。

命令就是我把怎么干都设计好了,给你一个说明书,你按照执行就行了。诸葛亮用这招比较多,比如说送你一个锦囊,遇到处理不了的事,打开锦囊,就有妙计在里面,按照执行就行了,这个锦囊就是命令。

至于访问者,为什么还要毛遂自荐呢,直接把事情拿过来做不就行了么。其实这里面还是有“我”的行为,“我”还是主导,你虽然要求干事情,但是干什么事情,还是最后由“我”来分配、决定的。

最后一个是解释器,它更像是针对特定情况的行为方案,所以不属于上面任何一种,用的也不多,具体不细讲。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值