设计模式笔记 23. Visitor 访问者模式(行为型模式)
2008-09-26 16:15
381 查看
[align=center]23. Visitor 访问模式[/align]
[align=right]2008-09-26[/align]
动机(Motivation)
[align=left]在软件构建过程中,由于需求的改变,某些层次结构中常常需要增加新行为(方法),如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。[/align]
[align=left]如何在不更改类层次结构的前提下,在运行时根据需要透明地为类层次结构上的各个分类动态添加新的操作,从而避免上述问题。[/align]
意图(Intent)
[align=left]表示一个作用于某对象结构中的各元素的操作,它可以在不改变各元素的类的前提下定义作用于这些元素的新操作。[/align]
场景:
[align=left]图形系统,假设其图像种类稳定,而其可提供的操作变化。[/align]
//为该对象结构中ConcreteElement的每一个类声明一个Visitor操作
abstract class Visitor
//具体访问者,实现每个由Visitor声明的操作,每个操作实现算法的一部分,而该算法片断乃是对于结构中对象的类
class ConcreteVisitor1 : Visitor
class ConcreteVisitor2 : Visitor
//定义一个Accept操作,它以一个访问者为参数
abstract class Element
//具体元素,实现Accept操作
class ConcreteElementA : Element
class ConcreteElementB : Element
//能枚举它的元素,可以提供一个高层的接口以允许访问者访问它的元素
class ObjectStructure
class Program
{
static void Main(string[] args)
{
ObjectStructure o = new ObjectStructure();
o.Attach(new ConcreteElementA());
o.Attach(new ConcreteElementB());
ConcreteVisitor1 v1 = new ConcreteVisitor1();
ConcreteVisitor2 v2 = new ConcreteVisitor2();
o.Accept(v1);
o.Accept(v2);
Console.Read();
}
}
Visitor模式的几个要点:
1、本模式通过所谓双重分发(double dispatch)来实现在不更改Element类层次结构的前提下,在运行时透明地为类层次结构上的各个类动态添加新的操作。
2、所谓双重分发即Visitor模式中包含两个多态分发(注意其中的的多态机制):第一个为Accept方法的多态辨析,第二个为Visit方法的多态辨析。
3、Visitor模式最大的缺点在于扩展类层次结构(增加新的Element子类),会导致Visitor类的改变。因此本模式适用于“Element类层次结构稳定,而其中的操作却面临频繁变动”。
[align=right]2008-09-26[/align]
动机(Motivation)
[align=left]在软件构建过程中,由于需求的改变,某些层次结构中常常需要增加新行为(方法),如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。[/align]
[align=left]如何在不更改类层次结构的前提下,在运行时根据需要透明地为类层次结构上的各个分类动态添加新的操作,从而避免上述问题。[/align]
意图(Intent)
[align=left]表示一个作用于某对象结构中的各元素的操作,它可以在不改变各元素的类的前提下定义作用于这些元素的新操作。[/align]
场景:
[align=left]图形系统,假设其图像种类稳定,而其可提供的操作变化。[/align]
//为该对象结构中ConcreteElement的每一个类声明一个Visitor操作
abstract class Visitor
//具体访问者,实现每个由Visitor声明的操作,每个操作实现算法的一部分,而该算法片断乃是对于结构中对象的类
class ConcreteVisitor1 : Visitor
class ConcreteVisitor2 : Visitor
//定义一个Accept操作,它以一个访问者为参数
abstract class Element
//具体元素,实现Accept操作
class ConcreteElementA : Element
class ConcreteElementB : Element
//能枚举它的元素,可以提供一个高层的接口以允许访问者访问它的元素
class ObjectStructure
class Program
{
static void Main(string[] args)
{
ObjectStructure o = new ObjectStructure();
o.Attach(new ConcreteElementA());
o.Attach(new ConcreteElementB());
ConcreteVisitor1 v1 = new ConcreteVisitor1();
ConcreteVisitor2 v2 = new ConcreteVisitor2();
o.Accept(v1);
o.Accept(v2);
Console.Read();
}
}
Visitor模式的几个要点:
1、本模式通过所谓双重分发(double dispatch)来实现在不更改Element类层次结构的前提下,在运行时透明地为类层次结构上的各个类动态添加新的操作。
2、所谓双重分发即Visitor模式中包含两个多态分发(注意其中的的多态机制):第一个为Accept方法的多态辨析,第二个为Visit方法的多态辨析。
3、Visitor模式最大的缺点在于扩展类层次结构(增加新的Element子类),会导致Visitor类的改变。因此本模式适用于“Element类层次结构稳定,而其中的操作却面临频繁变动”。
相关文章推荐
- [设计模式笔记]三. 行为型模式--25. Visitor模式(访问者)对象行为型模式(一)
- 设计模式笔记(24)---访问者模式(行为型)
- 设计模式笔记(24)---访问者模式(行为型)
- [设计模式笔记]三. 行为型模式--25. Visitor模式(访问者)对象行为型模式(二)
- 设计模式笔记(24)---访问者模式(行为型)
- 设计模式笔记 15. Interpreter 解释器模式(行为型模式)
- 设计模式-行为型之访问者模式
- 设计模式笔记--访问者模式
- 设计模式笔记--行为型模式-之三 解释器
- 23种设计模式4--行为型模式(策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式)
- 设计模式笔记(18)---迭代器模式(行为型)
- 设计模式笔记(20)---职责链模式(行为型)
- [设计模式笔记]三. 行为型模式--19. Mediator模式(中介者)对象行为型模式(一)
- 设计模式学习笔记(七):行为型模式
- [设计模式笔记]三. 行为型模式--17. Interpreter模式(解释器模式)(一)
- 设计模式笔记(23)---策略者模式(行为型)
- Visitor 访问者(行为型模式)--学习笔记
- 学习笔记——JAVA设计模式<17>访问者模式
- 设计模式18:访问者模式【行为型】
- 设计模式笔记(14)---模板方法模式(行为型)