Java设计模式27访问者模式

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

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

1 / 32
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功