设计模式考点( 四 )


5、用构建在原语操作上的高层操作构造一个系统)这样一种结构在支持事务()的信息系统中很常见 。模式提供了对事务进行建模的方法 。有一个公共接口 , 使得可以用同一种方式调用所有的事务 , 同时使用该模式也易于添加新事务以扩展系统 。
解释器模式()
**意图:**给定一个语言 , 定义它的文法的一种表示 , 并定义一个解释器 , 这个解释器使用该表示来解释语言中的句子 。
题目选项描述
有一个语言需要解释执行 , 并且可将句子表示为一个抽象语法树
适用性
模式适用于当有一个语言需要解释执行,并且可将该语言中的句子表示为一个抽象语法树时 , 以下情况效果最好:
1、该文法简单 。对于复杂的发文 , 文法的类层次变得庞大而无法管理 。此时语法分析程序生成器这样的工具是更好的选择 。它们无须构建抽象语法树即可解释表达式 , 这样可以节省空间还可能节省时间 。
2、效率不是一个关键问题 。最高效的解释器通常不是通过直接解释语法分析树实现的 , 而是首先将它们转换成另一种形式 。不过 , 即使在这种情况下 , 转换器仍然可用该模式实现 。
迭代器模式()
**意图:**提供一种方法顺序访问一个聚合对象中的各个元素 , 且不需要暴露该对象的内部表示 。
题目选项描述
访问一个聚合对象的内容而无须暴露它的内部表示
适用性
1、访问一个聚合对象的内容而无须暴露它的内部表示 。
2、支持对聚合对象的多种遍历 。
3、为遍历不同的聚合结构提供一个统一的接口 。
中介者模式(终结者模式)()
**意图:**用一个中介对象来封装一系列的对象交互 。中介者使各对象不需要显式地相互引用 , 从而使其耦合松散 , 而且可以独立地改变它们之间的交互 。
题目选项描述
1、一个对象引用其他很多对象并且直接与这些对象通信 , 导致难以复用该对象
2、一组对象以定义良好但是复杂的方式进行通信 , 产生的相互依赖关系结构混乱且难以理解 。
3、减少多个对象或类之间的通信复杂性
适用性
一组对象以定义良好但是复杂的方式进行通信 , 产生的相互依赖关系结构混乱且难以理解 。
备忘录模式()
**意图:**在不破坏封装性的前提下捕获一个对象的内部状态 , 并在对象之外保存这个状态 。这样以后就可以将对象恢复到原先保存的状态 。
题目选项描述
1、将对象的状态恢复到先前的状态
2、在不破坏封装性的前提下 , 捕获对象的内部状态并在对象之外保存
3、必须保存一个对象在某一个时刻的(部分)状态
适用性
1、必须保存一个对象在某一个时刻的(部分)状态 , 这样以后需要时它才能恢复到先前的状态 。
2、如果一个用接口来让其他对象直接得到这些状态 , 将会暴露对象的实现细节并破坏对象的封装性 。
观察者模式()
**意图:**定义对象间的一种一对多的依赖关系 , 当一个对象的状态发生改变时 , 所有依赖于它的对象都得到通知并被自动更新 。
题目选项描述
1、当一个对象必须通知其它对象 , 而它又不能假定其它对象是谁时
2、在发布-订阅(-)消息模型中 , 订阅者订阅一个主题后 , 当该主题有新消息到达时 , 所有订阅者都会收到通知