【设计模式】行为型模式(上)

来源:互联网 发布:双系统windows连不上网 编辑:程序博客网 时间:2024/06/12 19:32

行为型模式涉及到算法和对象间职责的分配,描述了对象和类的模式,以及它们之间的通信模式。

访问者模式(Visitor)

是什么?

表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

结构图?



使用场景?

①一个对象中存在着一些与本对象不相干(或关系较弱)的操作,为了避免这些操作污染这个对象,则可以使用访问者模式来把这些操作封装到访问者中去

②一组对象中,存在着相似的操作,为了避免出现大量重复的代码,也可以将这些重复的操作封装到访问者中去 

优缺点?

优点:①符合单一职责原则②扩展性良好

缺点:增加新的数据结构困难

中介者模式(Mediator)

是什么?

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

结构图?


使用场景?

“多对多”①一组定义良好的对象,现在要进行复杂的通信②定制一个分布在多个类中的行为,而又不想生成太多的子类。

优缺点?

优:①降低了系统对象之间的耦合性,使得对象易于独立的被复用②提高系统的灵活性,使得系统易于扩展和维护

缺:一旦中介对象出现问题,那整个系统将受到较大影响

命令模式(Command)

是什么?

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

结构图?


使用场景?

①需要对行为进行“记录、撤销、重做”等处理

②命令需要进行各种管理逻辑

③发送者和执行者有不同的生命周期,命令发送了并不是立即执行

好处?

把请求一个操作的对象与知道怎么执行一个操作的对象分割开

职责链模式(Chain of Responsibility)

是什么?

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

结构图?


使用场景?

①有多个对象处理请求,到底怎么处理在运行时确定

②希望在不明确指定接受者的情况下,向多个对象中的一个提交请求

③可处理一个请求的对象集合应该被动态指定

好处?

降低了耦合度;职责链可简化对象的相互连接;增强了给对象指派职责的灵活性;增加新的请求处理类方便

解释器模式(interpreter)

是什么?

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

结构图?



使用场景?

①当一个语言需要解释执行,并可以将该语言中的句子表示为一个抽象语法树的时候②一些重复出现的问题可以用一种简单的语言来进行表达③一个语言的文法较为简单④执行效率不是关键和主要关心的问题

优缺点?

优:易于实现文法;易于扩展新的语法

缺:执行效率较低;对于复杂文法难以维护

迭代器模式(Iterator)

是什么?

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

结构图?


使用场景?

①访问一个聚合对象的内容而无需暴露它的内部表示②支持对聚合对象的多种遍历③对遍历不同的聚合结构提供一个统一的接口。

这个模式的使用较少。

优缺点?

优:简化了遍历方式;可以提供多种遍历方式;封装性良好

缺:如果是比较简单的遍历,使用此模式会较为繁琐

小结

(1)越是类别多,越要做好统筹。如果能分批进行总结,那是再好不过了。还有最重要的一点就是要有所侧重。加油

(2)发现csdn编辑的一个不好的地:没有格式刷功能。

原创粉丝点击