设计模式之行为型——动作

1、观察者:定义对象间的一种一对多的依赖关系,当一个对象发生改变时,所有依赖于它的对象都能得到通知并自动更新

非官方:这个好像监控啊,它会及时的将监控点变化反馈给观察者,只不过它不是用来记录。什么情况需要安装监控呢,这些情况就可以考虑用此模式了。

代理是帮人办事,观察者是给人站岗放风,他俩分到了不同的类型里呢,从功能上我认为前者的重点在于结构上的安排,属于可有可无的,没有代理者请求者还可以做这件事,而后者重点在于需求,没有观察者会影响结果。

 

2、模板方法:定义一个操作的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

非官方:建造者、原型;享元;模板方法削重四兄弟,有点傻傻的分不清了吧,哈哈,它们都可以减少类似的代码,类型不一样,这个模式看官宣吧,明白儿的,哎,对了,有没有发现模板里的方法是模糊的,所以只能在子类中将它写死,从而提高了扩展性,减少了冗余。

3、命令:将一个请求封装为一个对象,从而使得你可用不同的请求对客户进行参数化;可以对请求排队或记录请求日志,以及支持可撤销的操作

非官方:请求者和执行者间多出来的东东,想起了点什么吗?嗯,代理,一个是人,一个不是,我看到的区别是使用场景不同,结构与写法及内容上可辨度还是很高的。

 

4、状态:允许一个对象在其内部状态改变时改变它的行为,让对象看起来似乎修改了它的类

非官方:为一件事加一个buff(状态)类,让这件事的具体状态继承buff,使buff与事呈聚合关系,从而降低耦合度,减轻事这个类的负担

 

5、职责链:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止

非官方:体现了一个权限递进,请求上交的过程,有效地避免了一个请求被多个角色处理的问题。需要定义权限,级别关系。

——————————————————————————————————————————————————————

6、解释器:定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言的句子

非官方:转换语言,让对方能听懂?这不是适配器吗。你想想适配器是怎么说的,它一般用在什么时候,区别明了了吧。

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

非官方:嘿,又是中介,前边代理和命令还算委婉点,这个太直接了吧。神似!神似!建议参考一下网络拓扑结构来认识这个模式。

 

8、访问者:表示一个作用于某对象结构中的各元素的操作,使你可以再不改变各元素的类的前提下定义作用于这些元素的新操作

非官方:拿书中的例子来说,我觉得也可以用状态模式来实现,这两个举得例子太像了。这个,,,还是看官方的吧。

9、策略:定义一系列算法,把他们一个个封装起来,并使他们可相互替换,使得算法可独立于使用它的客户而变化

非官方:官方说的太专业,吾不懂,吾要讲,把解决问题的不同方法放在一个“工具箱”里,然后拿着这个“工具箱”参与到整个问题的解决中去。这个“工具箱”就是应对问题的策略

 

10、备忘录在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态

非官方:为一个状态做一个副本,当状态被破坏后可以通过备忘录来初始化状态。看你怎样备份。

11、迭代器:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示

非官方:名副其实,悄悄的访问聚合对象的过程(过程放后台),只将访问结果显示出来,迭代说的是这个方法,词义可查。

猜你喜欢

转载自blog.csdn.net/qq_41026669/article/details/89708065