23种设计模式(9):访问者模式-java开发java经验技巧

23种设计模式(9):访问者模式-java开发java经验技巧

ID:30748645

大小:125.50 KB

页数:5页

时间:2019-01-03

23种设计模式(9):访问者模式-java开发java经验技巧_第1页
23种设计模式(9):访问者模式-java开发java经验技巧_第2页
23种设计模式(9):访问者模式-java开发java经验技巧_第3页
23种设计模式(9):访问者模式-java开发java经验技巧_第4页
23种设计模式(9):访问者模式-java开发java经验技巧_第5页
资源描述:

《23种设计模式(9):访问者模式-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、23种设计模式(9):访问者模式-编程开发技术23种设计模式(9):访问者模式原文出处:卡奴达摩的专栏定义:封装某些作用于某种数据结构中各元索的操作,它可以在不改变数据结构的前提卜•定义作用于这些元素的新的操作。类型:行为类模式类图:访问者模式可能是行为类模式中最复杂的一种模式了,但是这不能成为我们不去掌握它的理由。我们首先來看一个简单的例子,代码如下:classA{publicvoidmethodi(){System,out.printin(〃我是A〃);publicvoidmethod2(Bb){b・showA(this);classB{p

2、ublicvoidshowA(Aa){a.method1();}我们主耍来看一下在类A中,方法methodi和方法method2的区别在哪里,方法methodi很简单,就是打印出一句“我是A”;方法method2稍微复杂一点,使用类B作为参数,并调用类B的showA方法。再来看一下类B的showA方法,showA方法使用类A作为参数,然后调用类A的methodi方法,可以看到,method2方法绕來绕去,无非就是调用了一下口己的method1方法而已,它的运行结果应该也是“我是A”,分析完之后,我们来运行一下这两个方法,并看一下运行结果:pub

3、licclassTest{publicstaticvoidmain(String[]args){Aa=newA();a.methodl();a.method2(newB());运行结果为:我是A我是A看懂了这个例子,就理解了访问者模式的90%,在例子中,对于类A來说,类B就是一个访问者。但是这个例了并不是访问者模式的全部,虽然直观,但是它的可扩展性比较差,下而我们就来说一下访问者模式的通用实现,通过类图可以看到,在访问者模式中,主要包描下面儿个角色:•?抽象访问者:抽象类或者接口,声明访问者可以访问哪些元索,具体到程序屮就是visit方法中的参

4、数定义哪些对象是可以被访问的。•访问者:实现抽象访问者所声明的方法,它影响到访问者访问到一个类后该干什么,要做什么事情。•抽象元素类:接口或者抽象类,声明接受哪一•类访问者访问,程序上是通过accept方法中的参数来定义的。抽彖元素一般有两类方法,一部分是本身的业务逻辑,另外就是允许接收哪类访问者来访问。•元素类:实现抽彖元索类所声明的accept方法,通常都是visitor.visit(this),基木上已经形成一种定式了。•结构对象:一个元素的容器,-般包含一个容纳多个不同类、不同接口的容器,如List、Set.Map等,在项冃中一般很少抽

5、彖出这个角色。访问者模式的通用代码实现abstractclassElement{publicabstractvoidaccept(IVisitorvisitor);publicabstractvoiddoSomething();}interfaceIVisitor{publicvoidvisit(ConcreteElementlell);publicvoidvisit(ConcreteElement2el2);}classConcreteElementlextendsElement{publicvoiddoSomethingO{System,o

6、ut.printin(〃这是元索1〃);}publicvoidaccept(IVisitorvisitor){visitor,visit(this);}}classConcreteElement2extendsElement{publicvoiddoSomethingO{System,out.printin(〃这是元素2〃);}publicvoidaccept(IVisitorvisitor){visitor,visit(this);}}classVisitorimplemcntsIVisitor{publicvoidvisit(Concret

7、eElementlell){el1.doSomethingO;}publicvoidvisit(ConcreteElement2el2){el2.doSomethingO;}}classObjectStruture{publicstaticListgetList(){Listlist=newArrayList();Randomran=newRandom();for(inti=0;i<10;i++){inta二ran.nextlnt(100);辻(a>50){list.add(newConcr

8、eteElcmcntl());}else{list,add(newConcreteElement2());returnlist;}}publiccla

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。