当前位置: 首页 > 面试题库 >

带有示例的访客模式的目的

何向荣
2023-03-14
问题内容

我对访问者模式及其用途感到非常困惑。我似乎无法真正想象使用此模式或其目的的好处。如果有人可以举例说明的话,那就太好了。


问题答案:

很久以前…

class MusicLibrary {
    private Set<Music> collection ...
    public Set<Music> getPopMusic() { ... }
    public Set<Music> getRockMusic() { ... }
    public Set<Music> getElectronicaMusic() { ... }
}

然后,您意识到您希望能够按其他流派过滤图书馆的藏书。您可以继续添加新的getter方法。或者您可以使用访客。

interface Visitor<T> {
    visit(Set<T> items);
}

interface MusicVisitor extends Visitor<Music>;

class MusicLibrary {
    private Set<Music> collection ...
    public void accept(MusicVisitor visitor) {
       visitor.visit( this.collection );
    }
}

class RockMusicVisitor implements MusicVisitor {
    private final Set<Music> picks = ...
    public visit(Set<Music> items) { ... }
    public Set<Music> getRockMusic() { return this.picks; }
}
class AmbientMusicVisitor implements MusicVisitor {
    private final Set<Music> picks = ...
    public visit(Set<Music> items) { ... }
    public Set<Music> getAmbientMusic() { return this.picks; }
}

您将数据与算法分开。您将算法卸载到访问者实现中。您可以通过创建 更多 访问者来添加功能,而不是不断修改(和膨胀)保存数据的类。



 类似资料:
  • 我有一个关于访客模式的问题!假设我有一个数据结构类,在它里面我有一个与类2的has-a关系。Class2有特定的类层次结构,大约有10个类。 我需要创建Class1实例列表,并发送访客请求。根据类别2参观(类别1)。我不能在class2中使用迭代,因为我需要class1上下文中的变量。 现在我在考虑接受Class1对象的dispatcher,然后在这个类的基础上检查class2的类型并调用一些东西

  • 本文向大家介绍带有babel的webpack.config.js的示例,包括了带有babel的webpack.config.js的示例的使用技巧和注意事项,需要的朋友参考一下 示例 依存关系 webpack.config.js            

  • 问题内容: 假设以下路由访问xml文件,以给定的xpath(?key =)替换特定标签的文本: 然后,我将使用cURL这样: xpath扩展应该访问标记以将其当前文本更改为“ John”。 我不知道如何实现这一目标,因为我才刚刚开始学习Flask和REST,在这种情况下我找不到很好的例子。另外,我想使用lxml来操纵xml文件,因为我已经知道了。 有人可以提供帮助并提供示例指导我吗? 问题答案:

  • 我正在查看用Scala编写GraphQL服务器的Sangria库。但奇怪的是,同一个类型系统必须实现两次:(1)作为GraphQL类型声明的一部分,(2)也是在服务器端,作为Scala case类,附带ObjectType、InterfaceType等。 在Scala中硬编码类型系统尤其令人厌烦,因为我的目的是能够CRUD任意形状的聚合,其中每个形状都被定义为类型的GraphQL集合。例如,假设S

  • 问题内容: 我是ANTLR4的新手,请原谅我的无知。我遇到了这个演示,其中定义了一个非常简单的算术表达式语法。看起来像: 这很棒,因为它将生成一个非常简单的二进制树,可以使用幻灯片中解释的访问者模式来遍历它,例如,下面是访问的函数: 我想添加的下一件事是对括号的支持。所以我修改了如下: 不幸的是,上面的代码失败了,因为遇到三个属性时会加上括号,并且它们为null(NPE失败)。 我认为我可以通过定

  • 在Visitor模式中,我们使用一个访问者类来更改元素类的执行算法。 通过这种方式,元素的执行算法可以随着访问者的变化而变化。 此模式属于行为模式类别。 根据模式,元素对象必须接受访问者对象,以便访问者对象处理元素对象上的操作。 实现 (Implementation) 我们将创建一个定义接受操作的ComputerPart接口。 Keyboard , Mouse , Monitor和Computer