【设计模式】行为模式之Visitor访问者
2016-09-04 10:07
399 查看
Visitor访问者是一种对象行为型设计模式,用于表示一个作用于某对象结构中的各元素的操作,使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作。使用Visitor模式, 必须定义两个类层次,一个对应于接受操作的元素,另一个对应于定义对元素的操作的访问者,给访问者类层次增加一个新的子类即可创建一个新的操作。
Visitor访问者模式的结构如下图所示:
上图中,Visitor访问者为该对象结构中ConcreteElement的每一个类声明一个visi操作,该操作的名字和特征标识了发送visit操作给该访问者的那个类,这使得访问者可以确定正被访问元素的具体的类,这样访问者就可以通过该元素的特定的接口直接访问它。ConcreteVisitor具体访问者实现每个visit声明的操作,每个操作实现本算法的一部分,而该算法片段乃是对应于结构中对象的类,ConcreteVisitor为该算法提供了上下文并存储它的局部状态,这一状态常常在遍历该结构的过程中累积结果。Element元素定义一个accept操作,它以一个访问者为参数。ConcreteElement具体元素实现accept操作,该操作以一个访问者为参数。ObjectStructure对象结构能枚举它的元素,可以提供一个高层的接口以允许该访问者访问它的元素,可以是一个复合或是一个集合,如一个列表或一个无序集合。
一个使用Visitor模式的客户必须创建一个ConcreteVisitor对象,然后遍历该对象结构,并用该访问者访问每一个元素。当一个元素被访问时,它调用对应于它的类的visit操作,如果必要,该元素将自身作为这个操作的一个参数以便该访问者访问它的状态。访问者模式使得易于增加新的操作,仅需增加一个新的访问者即可,而增加新的ConcreteElement类却很困难,原因是每添加一个新的ConcreteElement都要在Visitor中添加一个新的抽象操作,并在每一个ConcreteVisitor类中实现相应的操作。
Visitor访问者模式的结构如下图所示:
上图中,Visitor访问者为该对象结构中ConcreteElement的每一个类声明一个visi操作,该操作的名字和特征标识了发送visit操作给该访问者的那个类,这使得访问者可以确定正被访问元素的具体的类,这样访问者就可以通过该元素的特定的接口直接访问它。ConcreteVisitor具体访问者实现每个visit声明的操作,每个操作实现本算法的一部分,而该算法片段乃是对应于结构中对象的类,ConcreteVisitor为该算法提供了上下文并存储它的局部状态,这一状态常常在遍历该结构的过程中累积结果。Element元素定义一个accept操作,它以一个访问者为参数。ConcreteElement具体元素实现accept操作,该操作以一个访问者为参数。ObjectStructure对象结构能枚举它的元素,可以提供一个高层的接口以允许该访问者访问它的元素,可以是一个复合或是一个集合,如一个列表或一个无序集合。
一个使用Visitor模式的客户必须创建一个ConcreteVisitor对象,然后遍历该对象结构,并用该访问者访问每一个元素。当一个元素被访问时,它调用对应于它的类的visit操作,如果必要,该元素将自身作为这个操作的一个参数以便该访问者访问它的状态。访问者模式使得易于增加新的操作,仅需增加一个新的访问者即可,而增加新的ConcreteElement类却很困难,原因是每添加一个新的ConcreteElement都要在Visitor中添加一个新的抽象操作,并在每一个ConcreteVisitor类中实现相应的操作。
相关文章推荐
- 【设计模式基础】行为模式 - 2 - 访问者(Visitor)
- 设计模式二十四:visitor(访问者)——类行为模式
- Java设计模式(23)——行为模式之访问者模式(Visitor)
- 行为设计模式---访问者模式(Visitor)
- 设计模式与泡mm的关系之visitor访问者模式及再思考
- 设计模式之访问者(visitor)模式
- 步步为营 .NET 设计模式学习笔记 二十一、Visitor(访问者模式)
- 设计模式 ( 二十 ) 访问者模式Visitor(对象行为型)
- 设计模式--访问者模式(Visitor)
- 步步为营 .NET 设计模式学习笔记 二十一、Visitor(访问者模式)
- 设计模式之(二十一)访问者模式Visitor
- 23种设计模式之访问者模式(Visitor)
- [php]php设计模式 Visitor (访问者模式)
- 设计模式--Java访问者(Visitor)模式
- 设计模式之Visitor(访问者)
- 设计模式之访问者(visitor)模式
- 设计模式--访问者模式(Visitor)
- 设计模式之访问者模式(Visitor)
- 设计模式 - Visitor 模式(访问者模式)
- Java设计模式-----Visitor访问者模式