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

chishan911 chishan911 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
要实现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?
...全文

相关推荐

访问者模式VisitorPattern

访问者模式(Java代码实现),博文附件

「已注销」

访问者模式(VisitorPattern)

访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。System.Collection命名空间下提供了大量集合操作对象。但大多数情况下处理的都是同类对象的聚集。换言之,在聚集上采取的操作都是一些针对同类型对象的同类操作。但是如果针对一个保存有不同类型对象的聚集采取某种操作该怎么办呢?粗看上去,这似乎不是什么难题。可是如果需要针对一个包含不同类型元素的聚集采取某种操作,而操作的细节根据元素的类型不同而有所不同时,就会出现必须对元素类型做类型判断的条件转移语句。这个时候,使用访问者模式就是一个值得考虑的解决方案。访问者模式适用

weixin_38669674

php设计模式 Visitor 访问者模式

复制代码 代码如下:<?php /** * 访问者模式 * * 表示一个作用于某对象结构中的各元素的操作,可以在不改变各元素的类的前提下定义作用于这些元素的新操作 * */ abstract class Visitor { abstract public function visitCroncreteElementA($element); abstract public function visitCroncreteElementB($element); } class ConcreteVisitor1 extends Visitor { public function visitCroncr

weixin_38731226

设计模式之访问者模式(Visitor)

访问者模式(Visitor) 用意:适用于数据结构相对未定的系统,把数据结构和作用于结构上的操作间的耦合解开。

qingkongxiaoyang

设计模式C++学习之访问者模式(Visitor)

设计模式C++学习之访问者模式(Visitor)

jtxqd521
评论 3
收藏 已收藏
分享
返回顶部
chishan911
Java EE 67,535 成员 225,843 内容