今天看淘宝的corba源码,其SQL语句的解析采用了visitor模式。visitor用在对复杂数据结构的操作,对数据结构中每个元素的操作可能变化,但不影响结构本身。基本代码如下:

针对每个需要被访问的元素,继承接口Visitable

public interface Visitable {public void accept(Visitor visitor);
}

public class ElementOne implements Visitable{private String ElementName;ElementOne(String Name){this.ElementName = Name;}@Overridepublic void accept(Visitor visitor) {// 下面这个this参数将决定具体调用哪个继承方法visitor.visitorString(this);}public void operation1(){System.out.println("ElementOne!");}
}

对访问元素的类实现如下:

public interface Visitor {public void visitorString(ElementOne element);public void visitorString(ElementTwo element);
}

public class ConcreteVisitor implements Visitor {public void visitorAll(Collection collection){Iterator it =collection.iterator();while(it.hasNext()){Object o = it.next();if(o instanceof Visitable){((Visitable)o).accept(this);//accept方法是关键,此处将调用ConcreteVisitor实现的visitorString方法}    }    }@Overridepublic void visitorString(ElementOne element) {// TODO Auto-generated method stubSystem.out.println("visitorString! Element 1");element.operation1();}@Overridepublic void visitorString(ElementTwo element) {// TODO Auto-generated method stubSystem.out.println("visitorString! Elements 2");element.operation2();}
}

应用的代码如下:

    public static void main(String[] args) {// TODO Auto-generated method stubCollection list = new ArrayList();list.add(new ElementOne("Element 1"));list.add(new ElementOne("Element 2"));list.add(new ElementOne("Element 3"));list.add(new ElementTwo("Element 1"));list.add(new ElementTwo("Element 2"));list.add(new ElementTwo("Element 3"));ConcreteVisitor cv = new ConcreteVisitor();cv.visitorAll(list);}

转载于:https://www.cnblogs.com/Fredric-2013/archive/2013/04/18/3028854.html

设计模式(访问者模式)相关推荐

  1. 设计模式 访问者模式

    文章目录 访问者模式 访问者模式实战 访问者模式 在相同的数据结构下, 增加容易变化的业务访问逻辑, 为了增强扩展性, 将易变的访问逻辑进行解耦的一种设计模式. 访问者模式实战 模拟学校中, 有老师和 ...

  2. 设计模式---访问者模式

    访问者模式 介绍 定义及使用场景 UML类图 角色 财务案例 个人心得体会 静态分派以及动态分派 静态分派 动态分派 访问者模式中的伪动态双分派 对访问者模式的一些思考 总结 优点 缺点 适用性 参考 ...

  3. C++设计模式——访问者模式(visitor pattern)

    一.原理讲解 1.1意图 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 1.2应用场景 一个对象结构包含很多类对象,它们有不同的接口,而你 ...

  4. java设计模式---访问者模式

      Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自 己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广 泛,遵循一定的编程模式,才能使自 ...

  5. yii2通过url访问类中的方法_行为型设计模式 访问者模式

    author zong email zongzhe1996@163.com 介绍 在访问者模式中,通过使用一个访问者类,可以改变元素类(被访问者)的执行算法.元素类的执行算法可以随着访问者的改变而改变 ...

  6. C++设计模式-访问者模式

    目录 基本概念 代码与实例 基本概念 访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变元素的类的前提下定义作用于这些元素的新操作. UML图如下(此图来源于大 ...

  7. PHP设计模式——访问者模式

    声明:本系列博客参考资料<大话设计模式>,作者程杰. 访问者模式表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. UML类图: 角色 ...

  8. C#设计模式——访问者模式(Vistor Pattern)

    一.引言 在上一篇博文中分享了责任链模式,责任链模式主要应用在系统中的某些功能需要多个对象参与才能完成的场景.在这篇博文中,我将为大家分享我对访问者模式的理解. 二.访问者模式介绍 2.1 访问者模式 ...

  9. 大话设计模式—访问者模式

    在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法.通过这种方式,元素的执行算法可以随着访问者改变而改变.这种类型的设计模式属于行为型模式.根据模式,元 ...

  10. C++设计模式——访问者模式

    访问者模式 在GOF的<设计模式:可复用面向对象软件的基础>一书中对访问者模式是这样说的:表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的 ...

最新文章

  1. mysql 造1亿条记录的单表--大数据表
  2. el-table中设置max-height属性使其固定表头
  3. 脚本可以放在html外,关于把script脚本放在html结束标签外的运行结果???
  4. mysql sysdate本周_oracle 、mysql 取昨天 前天 本周 数据
  5. 转贴:匹配中文的正则表达式及其他
  6. Hexo博客搭建与部署
  7. SOFA RPC 详细介绍
  8. linux 扩lv文件系统,Linux LVM系列(五)lv xfs文件系统在线扩容
  9. react环境搭建(-)
  10. Glide 4.x工作总体执行流程概述
  11. SAP 下载EXCEL模板
  12. 研发管理 - 流程篇
  13. 第十二章 Android第三方库源码
  14. 三菱PLC开发环境搭建笔记
  15. mac下使用github 上传代码
  16. Vue+Element-ui实现考试检查答题(判断正确答题,错答,漏答)
  17. 天猫、京东、苏宁双11房产战事起
  18. I.MX6ULL_Linux_基础篇(11) DDR介绍与校准
  19. STM32利用SPI读写SD卡的程序详解
  20. oracle日志如何查看,oracle如何查看日志

热门文章

  1. python随机画散点图-Python使用Plotly绘图工具,绘制散点图、线形图
  2. 学python用什么软件开发-5款Python程序员高频使用开发工具推荐
  3. python 贴吧自动回复机-用python itchat写一个微信机器人自动回复
  4. python中文软件-Python3.8.3下载
  5. python装饰器实例-Python装饰器实用例子
  6. python3.7安装numpy模块-Python3.7模块numpy
  7. python怎么判断一个文件是否存在-python判断文件是否存在的方法
  8. python打不开文件-python文件打不开如何解决
  9. 关于python中程序流程结构-四、python基础(程序目录结构规范)
  10. c+和python有什么不同-Python和C区别该如何理解?如何适应这种区别?