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