访问者模式问题之在不使用访问者模式的情况下,怎么在一个 SelectNode 类中实现 extractFunctions 方法

简介: 访问者模式问题之在不使用访问者模式的情况下,怎么在一个 SelectNode 类中实现 extractFunctions 方法

问题一:在 GoF 的设计模式原著中,访问者模式是如何被描述的?


在 GoF 的设计模式原著中,访问者模式是如何被描述的?


参考回答:

在 GoF 的设计模式原著中,访问者模式被描述为“表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。”


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/672354



问题二:为什么可以通过给每个对象增加新的成员方法来实现访问者模式的功能?


为什么可以通过给每个对象增加新的成员方法来实现访问者模式的功能?


参考回答:

因为访问者模式实现的所有功能本质上都可以通过给每个对象增加新的成员方法实现。利用面向对象多态的特性,父结构可以调用并聚合子结构相应方法的返回结果,从而实现与访问者模式相同的功能。


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/672355



问题三:在不使用访问者模式的情况下,如何在一个 SelectNode 类中实现 extractFunctions 方法?


在不使用访问者模式的情况下,如何在一个 SelectNode 类中实现 extractFunctions 方法?


参考回答:

在不使用访问者模式的情况下,可以在 SelectNode 类中直接增加一个 extractFunctions 成员方法。这个方法会遍历并调用其子结构(如 FieldsNode 和 WhereNode)的 extractFunctions 方法,并将结果合并后返回。例如:

java

class SelectNode extends SqlNode {  

   // ... 其他成员变量和构造函数 ...  

 

   public List<String> extractFunctions() {  

       List<String> res = new ArrayList<>();  

       // 调用子结构的 extractFunctions  

       res.addAll(fields.extractFunctions());  

       // 注意:这里应该是 where.extractFunctions(),而不是 selectNode.extractFunctions(),因为 selectNode 是当前对象  

       res.addAll(where.extractFunctions());  

       return res;  

   }  

}


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/672356



问题四:访问者模式的核心思想是什么?


访问者模式的核心思想是什么?


参考回答:

访问者模式的核心思想是将复杂的类层级结构中成员方法全部都抽象到一个类中去,这个类(访问者)定义了作用于这些元素的新操作。通过让访问者对象访问并操作复合对象结构中的元素,可以在不修改原有类结构的情况下增加新的操作。


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/672357



问题五:为什么需要访问者模式?


为什么需要访问者模式?


参考回答:

需要访问者模式的原因主要有两个:一是增加新的操作而无需修改现有类的代码,这符合开闭原则;二是将有关的行为集中到一个访问者对象中,而不是分散到多个类的层次结构中,这有助于减少系统的复杂性。然而,正如上述例子所示,在某些情况下,通过直接给每个对象增加新的成员方法也可以达到类似的效果。


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/672358

相关文章
|
10天前
|
设计模式 编译器 C#
访问者模式
访问者模式是一种行为型设计模式,用于将数据结构与其操作解耦。通过在不改变数据结构的前提下增加新的操作,访问者模式提供了一种灵活的方式来实现功能扩展。其关键特性包括分离操作、支持扩展和双分派机制。适用于需要对对象结构中的元素执行多种操作、频繁扩展操作以及不希望操作逻辑和数据结构耦合的场景。常见的使用案例包括编译器中的语法树、文件系统和游戏场景。优点是增加操作时无需修改数据结构,符合开闭原则;缺点是添加新的数据结构类型时需要修改所有访问者类,维护成本较高。
38 3
|
7月前
|
算法
行为型 访问者模式
行为型 访问者模式
63 0
|
设计模式 算法
抽象类应用模板方法模式和接口应用之策略设计模式
抽象类应用模板方法模式和接口应用之策略设计模式
64 0
|
设计模式 Java 关系型数据库
访问者模式解读
访问者模式解读
今天说说你不知道的访问者模式
今天说说你不知道的访问者模式
80 0
|
设计模式 程序员
访问者模式是啥?咋实现呀?
访问者模式是啥?咋实现呀?
|
设计模式
我学会了,访问者模式
访问者模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
120 0
我学会了,访问者模式
|
C++
C++访问者模式
简述 访问者模式(Visitor Pattern)表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。
1443 0
|
设计模式 Java 容器
适配器模式之访问者模式
设计模式目录 http://blog.csdn.net/fenglailea/article/details/52733435 风.fox 访问者模式 封装一些作用于某种数据结构中的各个元素的操作,他可以在不改变数据结构的前提下定义作用于这些元素的新的操作 通用类图 组成 抽象访问者 Vistor 抽象接口或类,声明访问者可以访问那些元素,具体到程
1186 0
|
存储
访问者模式-对象行为型
原理 访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。 1)访问者模式中对象结构存储了不同类型的元素对象,以供不同访问者访问。
770 0