浅谈行为型模式

Posted cancantrbl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈行为型模式相关的知识,希望对你有一定的参考价值。

1. 解释器 - 给定一个语言,定义他的文法的一种表示,再设计一个解析器来解释语言中的句子

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

2. 中介者 - 用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地互相引用,从而使其耦合松散,而且可以独立的改变他们之间的交互

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

 

3. 访问者 - 表示一个作用于某对象结构中的各元素的操作。使得在不改变各元素的类的前提下定义作用于这些元素的新操作

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

可以将数据结构和作用于结构上的操作之间的耦合解脱开

4. 策略 - 能定义一系列算法 并将每种算法分别放入独立的类中 以使算法的对象能够相互替换

从概念上来看,所有算法完成的都是相同的工作,只是实现不同,可以以相同的方式调用所有的算法,减少了各个算法类与使用算法类之间的耦合。

5. 备忘录 - 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态

游戏进度的保存就可以用备忘录模式。Originator是游戏角色类,Memento是角色状态储存箱类是Originator状态快照的值对象,CareTaker是角色状态管理者用于何时为何捕捉原发器的状态以及何时恢复状态

6. 迭代器 - 在不暴露集合底层表现形式的情况下遍历集合中所有的元素

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

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

 

 Reference

  1. https://refactoringguru.cn/design-patterns
  2. 大话设计模式
  3. http://c.biancheng.net/view/1402.html

以上是关于浅谈行为型模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式值职责链模式(行为型)

设计模式 行为型模式 -- 行为型模式概述

设计模式——行为型模式

设计模式初识行为型模式

行为型模式-模板方法模式

行为型模式-模板方法模式