对访问者模式(Visitor)的疑问?

chishan911 2006-09-19 12:03:09
要实现Visitor模式,得为访问者建立一个Visitor接口,还要为被访问的集合建立一个Visitable接口。然后,让具体类实现Visitor和Visitable接口。这两个接口如下所示:
  
  public interface Visitor
  {
  public void visitCollection(Collection collection);
  public void visitString(String string);
  public void visitFloat(Float float);
  }
  
  public interface Visitable
  {
  public void accept(Visitor visitor);
  }
  
  对于具体的String,可能是这样:
  
  public class VisitableString implements Visitable
  {
  private String value;
  public VisitableString(String string) {
  value = string;
  }
  public void accept(Visitor visitor) {
   visitor.visitString(this);
  }
  }
  
  在accept方法中,对this类型调用正确的visitor方法:
  
  visitor.visitString(this)
  
  这样,就可以如下实现具体的Visitor:
  
  public class PrintVisitor 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 visitString(String string) {
  System.out.println("""+string+""");
  }
  
  public void visitFloat(Float float) {
  System.out.println(float.toString()+"f");
  }
  }
问题:在VisitableString类别中,方法:
public void accept(Visitor visitor) {
   visitor.visitString(this);
  }
是否是错误的?在Visitor接口中visitString方法接收的是String类型,为什么这里用this?
...全文
276 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
chishan911 2006-09-21
  • 打赏
  • 举报
回复
OK,问题解决,原因是转贴人写错了,
Visitor接口中每个方法接收的参数就应该是Visitable型别或其子型别.
cosmowang 2006-09-20
  • 打赏
  • 举报
回复
不懂
是不是该visitString方法接收的是VisitableString
或者传递的 VisitableString 本身是 String
chishan911 2006-09-20
  • 打赏
  • 举报
回复
难道没人用过Visitor模式模式?
内容概要:本文系统性地介绍了Neo4j图数据库的技术体系、核心原理与企业级实战应用,涵盖从基础理论到生产落地的完整知识链条。深入剖析了Neo4j作为原生图数据库在存储架构、数据模型、查询语言(Cypher)方面的核心技术优势,重点讲解其基于节点、关系、属性的三元组模型和原生图存储机制,对比传统关系型数据库在处理复杂关联数据时的性能瓶颈。文档全面覆盖环境部署、工业级建模规范、Cypher深度编程、海量数据导入、Python/Java全栈开发集成、图算法分析(GDS)、高可用集群搭建及性能调优等内容,并通过金融风控知识图谱项目实现端到端的综合实战演练,提供可直接复用的建模模板、优化方案与故障排查手册。; 适合人群:具备一定数据库基础,从事大数据、人工智能、金融风控、知识图谱等相关领域的研发人员、架构师及数据工程师,尤其适合工作1-5年希望掌握图数据库企业级开发能力的技术人员。; 使用场景及目标:①掌握Neo4j在金融风控、社交网络、知识图谱等复杂关联场景下的建模与查询能力;②实现海量图数据的高效导入、集群部署与性能优化;③结合GDS图算法进行社群发现、路径分析、核心节点挖掘等智能分析任务;④构建前后端一体化的企业级图谱可视化系统。; 阅读建议:此资源强调工程化与生产级落地,建议结合实际项目边学边练,重点关注建模规范、索引设计、Cypher执行计划优化与集群运维等关键环节,配套源码与配置模板应作为开发参考标准使用。

67,535

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧