2015年软考系统架构设计师学习笔记第七章(3)
发布时间:2010/12/4 22:26:38 来源:城市学习网 编辑:ziteng
7.2.3 行为性模式
行为性模式 影响 系统的 状态、行为流。
简化、优化 并且 提高应用程序的 可维护性。
1、Chain of Responsibility 模式
在系统中建立一个链,在首先接收到它的级别处 被处理,或者定位到可以处理它的对象。
优点:
降低了耦合度。
增加面向对象制定责任的 灵活性。
类的集合可以作为一个整体。
以下情况中,应该使用 Chain of Responsibility 模式:
多个对象可以处理一个请求,而其处理器却是未知的。
在不指定确切的 请求接受对象的情况下,向几个对象中的 一个 发送请求。
动态地指定能够处理请求的对象集。
2、Command 模式
在对象中封装了请求。
优点:
将调用操作的对象 与 知道如何完成该操作的对象 相分离。
更容易添加新指令,因为不用修改已有类。
以下情况中,应该使用 Command 模式:
要通过执行的动作 来 参数化对象。
在不同的时间 指定、排序、执行 请求。
必须支持 Undo、日志记录 或 事务。
3、Interpreter 模式
解释定义其语法表示的语言,提供了语句解释器。
优点:
容易修改并扩展语法。
更容易实现语法。
以下情况中,应该使用 Interpreter 模式:
语言的语法比较简单。
效率并不是最主要的问题。
4、Iterator 模式
为集合中的有序访问提供了一致的方法,而该集合是独立于基础集合。
优点:
支持集合的不同遍历。
简化了集合的接口。
以下情况中,应该使用 Iterator 模式:
不开放集合对象内部表示的前提下,访问集合对象内容。
支持集合对象的多重遍历。
为遍历集合中的不同结构 提供了统一的接口。
5、Mediator 模式
通过引入一个能够管理对象间消息分布的对象,简化了系统中对象间的通信。提高了对象间的松耦合度,还可以独立地 改变 其间的交互。
优点:
去除对象间的影响。
简化了对象间协议。
集中化了控制。
由于不再需要直接互传消息,单个组件变得更加简单,而且容易处理。
由于不再需要 包含逻辑 来处理组件间的通信,组件变得更加通用。
以下情况中,应该使用 Mediator 模式:
对象集合需要以 一个定义规范但复杂的方式 进行通信。 [NextPage] 6、Memento 模式
保持对象状态的“快照”(snapshot),对象可以在不向外界公开其内容的情况下 返回到它的最初状态。
优点:
保持封装的完整性。
简化了返回到初始状态所需的操作。
以下情况中,应该使用 Memento 模式:
必须保存对象状态的快照,恢复状态。
7、Observer 模式
定义了对象间 一到多 的依赖关系,当对象改变状态时,将自动通知 并 更新它所有的依赖对象。
优点:
抽象了主题与 Observer 之间的耦合关系。
支持广播方式通信。
以下情况中,应该使用 Observer 模式:
对一个对象的修改 涉及对其他对象的修改,而且不知道有多少对象 需要进行相应修改。
对象应该能够 在不同假设对象标识的前提下 通知其它对象。
8、State 模式
对象在内部状态变化时,变更其行为,并且修改其类。
优点:
针对不同状态来划分行为,使状态转换显式进行。
9、Strategy 模式
定义了一组能够用来表示 可能行为集合的类。这些行为 可以在应用程序中使用,来修改应用程序功能。
优点:
另一种子类化方法。
在类自身中定义了 每一个行为,减少了条件语句。
更容易扩展模型。
以下情况中,应该使用 Strategy 模式:
许多相关类 只是在行为方面有所区别。
需要算法的不同变体。
算法使用客户端未知的数据。
10、Template Method 模式
不重写方法的前提下 允许 子类重载部分方法 的方法。
将一些步骤由子类实现。
优点:代码重用的基础技术。
以下情况中,应该使用 Template Method 模式:
一次实现算法的不变部分,子类实现算法的可变行为。
11、Visitor 模式
不改变操作元素的类 的前提下 定义一个新操作。
优点:
容易添加新操作。
集中相关 排除不相关 操作。
以下情况中,应该使用 Visitor 模式:
包含许多具有不同接口的对象类,并且想要对这些 依赖具体类的对象进行操作。
定义对象结构的类很少被修改,但想要在此结构上定义新的操作。