预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共32页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第第2727章章 访问者模式访问者模式 主讲教师:程细柱韶关学院计算机系 本书主编:刘伟清华大学出版社 本章教学内容 访问者模式 模式动机与定义 模式结构与分析 模式实例与解析 模式效果与应用 模式扩展 访问者模式 模式动机 对于系统中的某些对象,它们存储在同一个集 合中,且具有不同的类型,而且对于该集合中 的对象,可以接受一类称为访问者的对象来访 问,而且不同的访问者其访问方式有所不同, 访问者模式为解决这类问题而诞生。 访问者模式 模式动机 访问者模式 模式动机 在实际使用时,对同一集合对象的操作并不是唯一的, 对相同的元素对象可能存在多种不同的操作方式。 而且这些操作方式并不稳定,可能还需要增加新的操 作,以满足新的业务需求。 此时,访问者模式就是一个值得考虑的解决方案。 访问者模式的目的是封装一些施加于某种数据结构元素 之上的操作,一旦这些操作需要修改的话,接受这个操 作的数据结构可以保持不变。为不同类型的元素提供多 种访问操作方式,且可以在不修改原有系统的情况下增 加新的操作方式,这就是访问者模式的模式动机。 访问者模式 模式定义 访问者模式(VisitorPattern):表示一个作用 于某对象结构中的各元素的操作,它使我们可 以在不改变各元素的类的前提下定义作用于这 些元素的新操作。访问者模式是一种对象行为 型模式。 访问者模式 模式定义 VisitorPattern:Representanoperationtobe performedontheelementsofanobject structure.Visitorletsyoudefineanew operationwithoutchangingtheclassesofthe elementsonwhichitoperates. Frequencyofuse:low Visitor +visitConcreteElementA( ConcreteElementAelementA) +visitConcreteElementB( 访问者模式ConcreteElementBelementB)模式结构 ClientConcreteVisitorAConcreteVisitorB +visitConcreteElementA(+visitConcreteElementA( ConcreteElementAelementA)ConcreteElementAelementA) +visitConcreteElementB(+visitConcreteElementB( ConcreteElementBelementB)ConcreteElementBelementB) ObjectStructureElement +accept(Visitorvisitor) ConcreteElementAConcreteElementB +accept(Visitorvisitor)+accept(Visitorvisitor) +operationA()+operationB() visitor.visitConcreteElementA(this);visitor.visitConcreteElementB(this); 访问者模式 模式结构 访问者模式包含如下角色: •Vistor:抽象访问者 •ConcreteVisitor:具体访问者 •Element:抽象元素 •ConcreteElement:具体元素 •ObjectStructure:对象结构 访问者模式 模式分析 访问者模式中对象结构存储了不同类型的元素对象, 以供不同访问者访问。 访问者模式包括两个层次结构,一个是访问者层次结 构,提供了抽象访问者和具体访问者,一个是元素层 次结构,提供了抽象元素和具体元素。 相同的访问者可以以不同的方式访问不同的元素,相 同的元素可以接受不同访问者以不同访问方式访问。 在访问者模式中,增加新的访问者无须修改原有系 统,系统具有较好的可扩展性。 访问者模式 模式分析 典型的抽象访问者类代码如下所示: publicabstractclassVisitor { publicabstractvoidvisit(ConcreteElementAelementA); publicabstractvoidvisit(ConcreteElementBelementB); publicvoidvisit(ConcreteElementCelementC) { //元素ConcreteElementC操作代码 } } 访问者模式 模式分析 典型的具体访问者类代码如下所示: publicclassConcreteVisitorexte