16.Interpreter解释器(行为模式)
Motivation
将问题抽象为语言。
Intent
给定一个语言,定义它的文法的一种表示,并定义一种解释器,
这个解释器使用该表示来解释语言中的句子。
喜欢的方式是扩展而不是修改。
对于变化的东西,用封装。对于不变的东西,不需要做变化封装。
Interpreter模式比较适合简单的文法表示,对于复杂的文发表示,
Interperter模式会产生比较大的类层次结构,需要求助于语法分析
生成器这样的标准工具。
扩展,而不是修改。
开闭原则:对扩展是开发,对修改时关闭。
对程序进行修改是扩展,而不是修改。
17中介者
<1>依赖关系的转化
Motivation
在软件构建过程中,经常会出现多个对象互相关联交互的情况,
对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,
这种直接的引用关系将面临不断的变化。
在这种情况下,我们科使用一个中介者来管理对象间的关联关系,
避免相互交互的对象之间的紧耦合引用关系,从而更好的抵御变化。
模式的方法就是在解耦。
Intent
用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显示
的相互引用,从而使其松散耦合。
关系集中处理,代码不要散落到很多地方,权限要集中。
权限的集中表示责任的单一,职责的单一。
Mediator模式的几个要点
.将多个对象间复杂的关联关系解耦,Mediator模式将多个对象间的
控制逻辑进行集中管理,变多个对象相互关联为对个对象和一个
中介者关联,简化了系统的维护,抵御了可能的变化。
间接层:就是为了解耦。
计算机行业,任何技术都可以用间接层来解决。
.随着控制逻辑的复杂化,Mediator具体对象的实现可能相当
复杂。这时候对mediator对象进行分解处理。
.Facade模式是解耦系统外道系统内(单向)的对象关联关系;
Mediator模式解耦是系统内各个对象之间的关联关系(双向)
减少对象之间的依赖关系。
18Iterator模式
面向对象的可复用基础。
Motivation
在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,
我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中
包含的元素;同时这种 遍历也为同一种算法在多种集合对象上进行操作提供可能。