浅谈行为型模式 - 解释器,中介者。访问者,备忘录,策略,迭代器

1. 解释器 - INTERPRETER

通俗解释1:网上买了本《恋爱宝典》里面有各种恋爱的攻略和tips,比如怎么聊天,约会的步骤,如何准备惊喜等等。跟另一半约会的时候,只要做个Interpreter照着里面的脚本执行就可以了

通俗解释2:直男总是猜不透女生的话语中的真正意思,这时候就非常需要一个女友语句解释器了。直男是客户端,女生的说话内容是信息(context),首先需要个抽象翻译器是AbstractExperssion,再有多个继承于翻译器的concreteExpression:女友表情翻译器,女友语气翻译器,和结合情景翻译器等等,好处是可以方便的增加其他的翻译器完善解释的结果。

2. 中介者 - MEDIATOR

通俗解释1:四个靓女打麻将,相互之间谁应该给谁多少钱算不清楚了,我在旁边按照各自的筹码数算钱,赚了钱的从我这里拿,赔了钱的也付给我,一切就perfect咯,还顺便得到了四个靓女的电话。

通俗解释2: 联合国就是个典型的中介者,所有的国家之间不必两个两个的直接通信,可以通过联合国这个中介者发生关系。做UI的时候,所有的组件之间不会直接通信,而是用Dialog这个中介类重定向调用行为 以间接的方式进行合作。这样,组件仅依赖于一个中介者类 无需与多个其他组件相耦合

3. 访问者 - VISITOR

通俗解释1:圣诞节到了,要给每个靓女送一份礼物,可是给每个靓女送的花都要针对个人的特点来挑,我一个人哪搞得清楚,还是找礼品店老板做一下Visitor,让礼品店老板根据靓女的特点选一份礼物,这样就轻松多了

通俗解释2:比如男生和女生在审美的方面有很大的不同,在访问者结构中,Element是人,具体类是继承于Element的男生和女生,审美是Visitor,具体类是继承于审美的口红色号的审美和素颜的审美。因为性别这个分类是稳定的所以可以在审美类中增加男生观点和女生观点两个固定的方法。

目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。访问者模式使得增加新的操作(加送花)变的很容易,就是增加一个新的访问者类(访问花店老板)。可以将数据结构和作用于结构上的操作之间的耦合解脱开

4. 策略 - STRATEGY

通俗解释1:跟不同类型的小姐姐约会,要用不同的策略,有的请电影比较好,有的看歌剧效果不错,有的去海边浪漫最合适,但目的都是一样的为了得到小姐姐的芳心,我的追小姐姐的锦囊中都是Strategy哈

环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。从概念上来看,所有算法完成的都是相同的工作,只是实现不同,可以以相同的方式调用所有的算法,减少了各个算法类与使用算法类之间的耦合。

5. 备忘录 - MEMENTO

通俗解释1: 海王必备技能当然是要记住所有小姐姐的说过的话想做的事啊,小姐姐最容易被这种细节所感动到。幸亏有个备忘录,与哪个小姐姐说了什么话都拷贝一份放到备忘录里面保存,这样可以随时察看以前的记录咯

备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。游戏进度的保存就可以用备忘录模式。Originator是游戏角色类,Memento是角色状态储存箱类是Originator状态快照的值对象,CareTaker是角色状态管理者用于何时为何捕捉原发器的状态以及何时恢复状态

6. 迭代器 - ITERATOR

通俗解释1:在长途汽车上售货员售票,汽车是继承于Collection的具体集合,售票员A是继承于Iterator的具体迭代器,乘客是Collection中的item。有抽象的Iterator是为了容纳多种方式遍历,比如从前往后,从后往前的迭代。

这个模式分离了集合对象的遍历行为,抽象出一个迭代器类来负责,既可以不暴露结合的内部结构,又可以让外部代码透明的访问集合内部的数据。

 Reference

  1. https://refactoringguru.cn/design-patterns
  2. 大话设计模式
  3. http://c.biancheng.net/view/1402.html
  4. http://blog.sina.com.cn/s/blog_6e162de70101d0cf.html //这个贴子里的通俗解释都好好笑,浅显易懂但话风极骚
posted @ 2021-05-16 23:33  cancantrbl  阅读(135)  评论(0编辑  收藏  举报