Java设计模式27访问者模式.pdf
《Java设计模式27访问者模式.pdf》由会员分享,可在线阅读,更多相关《Java设计模式27访问者模式.pdf(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第27章第27章访问者模式访问者模式主讲教师:程细柱主讲教师:程细柱主讲教师:程细柱主讲教师:程细柱 韶关学院计算机系韶关学院计算机系韶关学院计算机系韶关学院计算机系本书主编:刘本书主编:刘本书主编:刘本书主编:刘 伟伟伟伟 清华大学出版社清华大学出版社清华大学出版社清华大学出版社本章教学内容 访问者模式访问者模式访问者模式访问者模式 模式动机与定义模式动机与定义模式动机与定义模式动机与定义 模式结构与分析模式结构与分析模式结构与分析模式结构与分析 模式实例与解析模式实例与解析模式实例与解析模式实例与解析 模式效果与应用模式效果与应用模式效果与应用模式效果与应用 模式扩展模式扩展模式扩展模式扩
2、展访问者模式 模式动机模式动机模式动机模式动机对于系统中的某些对象,它们对于系统中的某些对象,它们对于系统中的某些对象,它们对于系统中的某些对象,它们存储在同一个集存储在同一个集存储在同一个集存储在同一个集合中合中合中合中,且,且,且,且具有不同的类型具有不同的类型具有不同的类型具有不同的类型,而且对于该集合中,而且对于该集合中,而且对于该集合中,而且对于该集合中的对象,可以接受一类称为访问者的对象来访的对象,可以接受一类称为访问者的对象来访的对象,可以接受一类称为访问者的对象来访的对象,可以接受一类称为访问者的对象来访问,而且问,而且问,而且问,而且不同的访问者不同的访问者不同的访问者不同的
3、访问者其其其其访问方式有所不同访问方式有所不同访问方式有所不同访问方式有所不同,访问者模式为解决这类问题而诞生。访问者模式为解决这类问题而诞生。访问者模式为解决这类问题而诞生。访问者模式为解决这类问题而诞生。访问者模式模式动机访问者模式模式动机在实际使用时,对同一集合对象的操作并不是唯一的,在实际使用时,对同一集合对象的操作并不是唯一的,在实际使用时,对同一集合对象的操作并不是唯一的,在实际使用时,对同一集合对象的操作并不是唯一的,对对对对相同的元素对象相同的元素对象相同的元素对象相同的元素对象可能可能可能可能存在多种不同的操作方式存在多种不同的操作方式存在多种不同的操作方式存在多种不同的操作
4、方式。而且这些而且这些而且这些而且这些操作方式并不稳定操作方式并不稳定操作方式并不稳定操作方式并不稳定,可能可能可能可能还需要增加新的操还需要增加新的操还需要增加新的操还需要增加新的操作作作作,以满足新的业务需求。,以满足新的业务需求。,以满足新的业务需求。,以满足新的业务需求。此时,访问者模式就是一个值得考虑的解决方案。此时,访问者模式就是一个值得考虑的解决方案。此时,访问者模式就是一个值得考虑的解决方案。此时,访问者模式就是一个值得考虑的解决方案。访问者模式的目的访问者模式的目的访问者模式的目的访问者模式的目的是是是是封装一些施加于某种数据结构元素封装一些施加于某种数据结构元素封装一些施加
5、于某种数据结构元素封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改的话,接受这个操之上的操作,一旦这些操作需要修改的话,接受这个操之上的操作,一旦这些操作需要修改的话,接受这个操之上的操作,一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变作的数据结构可以保持不变作的数据结构可以保持不变作的数据结构可以保持不变。为不同类型的元素提供多为不同类型的元素提供多为不同类型的元素提供多为不同类型的元素提供多种访问操作方式,且可以在不修改原有系统的情况下增种访问操作方式,且可以在不修改原有系统的情况下增种访问操作方式,且可以在不修改原有系统的情况下增种访问操作方式,且可以在不修改
6、原有系统的情况下增加新的操作方式加新的操作方式加新的操作方式加新的操作方式,这就是访问者模式的模式动机。,这就是访问者模式的模式动机。,这就是访问者模式的模式动机。,这就是访问者模式的模式动机。访问者模式 模式定义访问者模式访问者模式访问者模式访问者模式(Visitor Pattern)(Visitor Pattern)(Visitor Pattern)(Visitor Pattern):表示一个:表示一个:表示一个:表示一个作用作用作用作用于某对象结构中的各元素的操作于某对象结构中的各元素的操作于某对象结构中的各元素的操作于某对象结构中的各元素的操作,它使我们,它使我们,它使我们,它使我们可
7、可可可以在不改变各元素的类的前提下定义作用于这以在不改变各元素的类的前提下定义作用于这以在不改变各元素的类的前提下定义作用于这以在不改变各元素的类的前提下定义作用于这些元素的新操作些元素的新操作些元素的新操作些元素的新操作。访问者模式是一种。访问者模式是一种。访问者模式是一种。访问者模式是一种对象行为对象行为对象行为对象行为型型型型模式。模式。模式。模式。访问者模式 模式定义Visitor Pattern:Visitor Pattern:Visitor Pattern:Visitor Pattern:Represent an operation to be Represent an opera
8、tion to be Represent an operation to be Represent an operation to be performed on the elements of performed on the elements of performed on the elements of performed on the elements of an object an object an object an object structurestructurestructurestructure.Visitor lets you define.Visitor lets y
9、ou define.Visitor lets you define.Visitor lets you define a new a new a new a new operation without changing the classes of the operation without changing the classes of the operation without changing the classes of the operation without changing the classes of the elementselementselementselements o
10、n which it operates.on which it operates.on which it operates.on which it operates.Frequency of use:Frequency of use:Frequency of use:Frequency of use:lowlowlowlow访问者模式 模式结构ConcreteElementA+accept(Visitor visitor)operationA()Visitor+visitConcreteElementA(ConcreteElementA elementA)visitConcreteElemen
11、tB(ConcreteElementB elementB)visitor.visitConcreteElementA(this);Element+accept(Visitor visitor)ConcreteVisitorA+visitConcreteElementA(ConcreteElementA elementA)visitConcreteElementB(ConcreteElementB elementB)ConcreteVisitorB+visitConcreteElementA(ConcreteElementA elementA)visitConcreteElementB(Conc
12、reteElementB elementB)ConcreteElementB+accept(Visitor visitor)operationB()ObjectStructureClientvisitor.visitConcreteElementB(this);访问者模式 模式结构模式结构模式结构模式结构访问者模式包含如下角色:访问者模式包含如下角色:访问者模式包含如下角色:访问者模式包含如下角色:Vistor:Vistor:Vistor:Vistor:抽象访问者抽象访问者抽象访问者抽象访问者 ConcreteVisitor:ConcreteVisitor:ConcreteVisitor:Co
13、ncreteVisitor:具体访问者具体访问者具体访问者具体访问者 Element:Element:Element:Element:抽象元素抽象元素抽象元素抽象元素 ConcreteElement:ConcreteElement:ConcreteElement:ConcreteElement:具体元素具体元素具体元素具体元素 ObjectStructure:ObjectStructure:ObjectStructure:ObjectStructure:对象结构对象结构对象结构对象结构访问者模式 模式分析模式分析模式分析模式分析访问者模式中访问者模式中访问者模式中访问者模式中对象结构对象结构对
14、象结构对象结构存储了不同类型的元素对象存储了不同类型的元素对象存储了不同类型的元素对象存储了不同类型的元素对象,以供不同访问者访问。以供不同访问者访问。以供不同访问者访问。以供不同访问者访问。访问者模式包括访问者模式包括访问者模式包括访问者模式包括两个层次结构两个层次结构两个层次结构两个层次结构,一个是,一个是,一个是,一个是访问者层次结访问者层次结访问者层次结访问者层次结构构构构,提供了抽象访问者和具体访问者,一个是,提供了抽象访问者和具体访问者,一个是,提供了抽象访问者和具体访问者,一个是,提供了抽象访问者和具体访问者,一个是元素层元素层元素层元素层次结构次结构次结构次结构,提供了抽象元素
15、和具体元素。,提供了抽象元素和具体元素。,提供了抽象元素和具体元素。,提供了抽象元素和具体元素。相同的访问者可以以不同的方式访问不同的元素相同的访问者可以以不同的方式访问不同的元素相同的访问者可以以不同的方式访问不同的元素相同的访问者可以以不同的方式访问不同的元素,相相相相同的元素可以接受不同访问者以不同访问方式访问同的元素可以接受不同访问者以不同访问方式访问同的元素可以接受不同访问者以不同访问方式访问同的元素可以接受不同访问者以不同访问方式访问。在访问者模式中,增加新的访问者无须修改原有系在访问者模式中,增加新的访问者无须修改原有系在访问者模式中,增加新的访问者无须修改原有系在访问者模式中,
16、增加新的访问者无须修改原有系统,系统统,系统统,系统统,系统具有较好的具有较好的具有较好的具有较好的可扩展性可扩展性可扩展性可扩展性。访问者模式 模式分析 典型的典型的典型的典型的抽象访问者类抽象访问者类抽象访问者类抽象访问者类代码如下所示:代码如下所示:代码如下所示:代码如下所示:public abstract class Visitorpublic abstract class Visitorpublic abstract class Visitorpublic abstract class Visitor public abstract void visit(ConcreteElemen
17、tA elementA);public abstract void visit(ConcreteElementA elementA);public abstract void visit(ConcreteElementA elementA);public abstract void visit(ConcreteElementA elementA);public abstract void visit(ConcreteElementB elementB);public abstract void visit(ConcreteElementB elementB);public abstract v
18、oid visit(ConcreteElementB elementB);public abstract void visit(ConcreteElementB elementB);public void visit(ConcreteElementC elementC)public void visit(ConcreteElementC elementC)public void visit(ConcreteElementC elementC)public void visit(ConcreteElementC elementC)/元素元素元素元素ConcreteElementCConcrete
19、ElementCConcreteElementCConcreteElementC操作代码操作代码操作代码操作代码 访问者模式 模式分析 典型的典型的典型的典型的具体访问者类具体访问者类具体访问者类具体访问者类代码如下所示:代码如下所示:代码如下所示:代码如下所示:public class ConcreteVisitor extends Visitorpublic class ConcreteVisitor extends Visitorpublic class ConcreteVisitor extends Visitorpublic class ConcreteVisitor extends
20、 Visitor public void visit(ConcreteElementA elementA)public void visit(ConcreteElementA elementA)public void visit(ConcreteElementA elementA)public void visit(ConcreteElementA elementA)/元素元素元素元素ConcreteElementAConcreteElementAConcreteElementAConcreteElementA操作代码操作代码操作代码操作代码 public void visit(Concret
21、eElementB elementB)public void visit(ConcreteElementB elementB)public void visit(ConcreteElementB elementB)public void visit(ConcreteElementB elementB)/元素元素元素元素ConcreteElementBConcreteElementBConcreteElementBConcreteElementB操作代码操作代码操作代码操作代码 访问者模式 模式分析典型的典型的典型的典型的抽象元素类抽象元素类抽象元素类抽象元素类代码如下所示:代码如下所示:代码如
22、下所示:代码如下所示:public interface Elementpublic interface Elementpublic interface Elementpublic interface Element public void accept(Visitor visitor);public void accept(Visitor visitor);public void accept(Visitor visitor);public void accept(Visitor visitor);访问者模式 模式分析典型的典型的典型的典型的具体元素类具体元素类具体元素类具体元素类代码如下所示
23、:代码如下所示:代码如下所示:代码如下所示:public class ConcreteElementA implements Elementpublic class ConcreteElementA implements Elementpublic class ConcreteElementA implements Elementpublic class ConcreteElementA implements Element public void accept(Visitor visitor)public void accept(Visitor visitor)public void acc
24、ept(Visitor visitor)public void accept(Visitor visitor)visitor.visit(this);visitor.visit(this);visitor.visit(this);visitor.visit(this);public void operationA()public void operationA()public void operationA()public void operationA()/业务方法业务方法业务方法业务方法 典型的对象结构类代码如下所示:public class ObjectStructurepublic c
25、lass ObjectStructurepublic class ObjectStructurepublic class ObjectStructure private ArrayList list=new ArrayList();private ArrayList list=new ArrayList();private ArrayList list=new ArrayList();private ArrayList list=new ArrayList();public void accept(Visitor visitor)public void accept(Visitor visit
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 设计 模式 27 访问者
限制150内