public interface Visitor {

public void visitString(StringElement stringE);

public void visitFloat(FloatElement floatE);

public void visitCollection(Collection> collection);

public void visitInt(IntElement inte);

}访问者接口实现类

public class ConcreteVisitor implements Visitor{

public void visitCollection(Collection> collection) {

Iterator> iterator = collection.iterator();

while (iterator.hasNext()) {

Object o = iterator.next();

if (o instanceof Visitable) {

((Visitable)o).accept(this);

}

}

}

public void visitFloat(FloatElement floatE) {

System.out.println(floatE.getFe());

}

public void visitString(StringElement stringE) {

System.out.println(stringE.getSe());

}

@Override

public void visitInt(IntElement inte) {

System.out.println(inte.getInts());

}

}操作类的接口:

public interface Visitable {

public void accept(Visitor visitor);

}操作类的具体实现类:

public class FloatElement implements Visitable{

private Float fe;

public FloatElement(Float fe) {

this.fe = fe;

}

public Float getFe() {

return this.fe;

}

public void accept(Visitor visitor) {

visitor.visitFloat(this);

}

}

public class IntElement implements Visitable{

private int ints;

public int getInts() {

return ints;

}

public IntElement(int i){

this.ints = i;

}

@Override

public void accept(Visitor visitor) {

visitor.visitInt(this);

}

}

public class StringElement implements Visitable{

private String se;

public StringElement(String se) {

this.se = se;

}

public String getSe() {

return this.se;

}

public void accept(Visitor visitor) {

visitor.visitString(this);

}

}测试类:

public class Test {

public static void main(String[] args) {

Visitor visitor = new ConcreteVisitor();

Visitable se = new StringElement("abc");

se.accept(visitor);

Visitable fe = new FloatElement(new Float(1.5));

fe.accept(visitor);

System.out.println("===========");

List result = new ArrayList();

result.add(new StringElement("abc"));

result.add(new StringElement("abc"));

result.add(new StringElement("abc"));

result.add(new FloatElement(new Float(1.5)));

result.add(new FloatElement(new Float(1.5)));

result.add(new FloatElement(new Float(1.5)));

visitor.visitCollection(result);

Visitable is = new IntElement(2);

is.accept(visitor);

}

}

posted on 2013-04-18 16:20 杨军威 阅读(131) 评论(0)  编辑  收藏

java 访问者模式_设计模式之访问者模式相关推荐

  1. 组合模式_[设计模式]10.组合模式

    组合模式,也叫"部分整体模式",它把相似的对象组合成树形结构的一个整体.于是,只需一个代表,我们就能继续访问与之相关的同族对象. 模式卡片 模式UML图 七个例子 部门里人很多,大 ...

  2. 抽象工厂模式_设计模式——抽象工厂模式

    阅读目录 使用频率:★★★★★ 一.什么是抽象工厂模式 二.补充说明 三.角色 四.例子 使用频率:★★★★★ 一.什么是抽象工厂模式 就是对一组具有相同主题的工厂进行封装(维基百科解释的很到位): ...

  3. java 肌汉模式_设计模式之原型模式详解(附源代码)

    原型模式(Prototype Pattern) 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...

  4. 过滤器用到了java哪个模式_设计模式之过滤器模式——Java语言描述

    过滤器模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来 实现 创建一个Person对象.Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列 ...

  5. python 享元模式_设计模式-创建型模式,python享元模式 、python单例模式(7)

    享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. 享元模式尝 ...

  6. 米线店结账程序 装饰着模式_设计模式——装饰者模式

    <Head First 设计模式> 学习笔记,码云同步更新中 如有错误或不足之处,请一定指出,谢谢~ 目录 查看其它设计模式笔记,点这里→设计模式笔记汇总 装饰者模式 定义: 动态地将责任 ...

  7. Java进阶专题(七) 设计模式之委派模式与策略模式

    一.前言 今天开始我们专题的第七课了.本章节将介绍:你写的代码中是否觉得很臃肿,程序中有大量的if...else,想优化代码,精简程序逻辑,提升代码的可读性,这章节将介绍如何通过委派模式.策略模式让你 ...

  8. 访问者模式 java_java设计模式之访问者模式

    写这篇文章之前,我也看了十几篇网络大牛写的访问者设计模式的文章,都说这个访问者模式是最复杂的一个,但是我觉得跟其他的设计模式并没有太多的不同,因此自己整理了一下,相信大多数人都能看懂. 一.认识访问者 ...

  9. java 类爆炸_设计模式系列·类爆炸之 Bridge 模式

    迷之微笑 经过 C 哥的精心指导,消息中心终于上线!代码运行了半个月,稳健无 bug . 王小二托着下腮,看着代码,一抹迷之微笑随之闪现^_^.作为一名有追求的码农,此时的快乐或许只有自己能懂. 消息 ...

最新文章

  1. react-redux的Provider和connect
  2. 在桌面应用程序与Web应用程序之间该如何选择
  3. python stringvar函数_Tkinter 求助,怎么获取StringVar() 的值
  4. Linux中的延时函数
  5. LeetCode 2109. 向字符串添加空格
  6. 使用stanford nlp进行依存句法分析
  7. scrapy 报错 no module named win32api 的解决方案
  8. C++ Primer Plus 随记(第八章)
  9. C#如何获取物理网卡,虚拟网卡,以及无线网卡
  10. php 爬取一个人的网易云评论,爬取网易云音乐某一个人的评论
  11. 企业级和个人苹果帐号AppleId申请
  12. 计算机编码知识,ASCII编码,GBK,Unicode,UTF-8编码详细介绍
  13. 5本财富自由好书的精华
  14. 实用:python中字典的扁平化(flat)
  15. evernote国际版不可用
  16. pythonic的典故_旷视开源深度学习框架「天元」,提供人人可用的AI“生产力工具”【星特写】...
  17. 网络电台管理套件AzuraCast
  18. 【DBC专题】-5-DBC文件格式解析
  19. android 文字选中朗读,Android开发之文本内容自动朗读功能实现方法
  20. 我们为什么选择acm(无聊yy)

热门文章

  1. 一般向量空间的基变换_向量几何--3-D空间中的基变换与坐标变换【转】 - 回到未来 - C++博客...
  2. 西门子840D HMI ADVANCED FOR PC 也可用于810D,840DSL中文版。
  3. 推荐一款制作表格工具|Latex|Markdown|HTML|Text|Mediawiki
  4. js调用原生API--陀螺仪和加速器
  5. (C语言)八大排序之:基数排序
  6. 4.2 Python图像的图像恢复-组合滤波器
  7. 局域网推流在学术会议现场应用
  8. 计算机网络 数据链路层 以太网帧格式
  9. Verilog 数字时钟
  10. div浮动到img上面