我需要在我的设计中访问模式吗?

Do I need to visitor pattern in my design

本文关键字:访问 模式 我的      更新时间:2023-10-16

我正在设计HTML解析器用于研究目的。我首先创建整体设计的地方。

用于存储 HTML 元素的数据结构。

Base: HtmlBaseElement

Derived: HTMLElement, PElement, HtagElemement, ImgElement, BodyElement, StrongElement

基本上,我将为 HTML 中的每种类型的元素创建一个派生类。

我需要将此 HTML 文件写回文件,并允许用户在已解析的 HTML 文件中添加元素。

这就是我在想的:

第一种方法:

创建一个BaseVisitor,该对
  1. 每种类型的元素都具有访问功能。

  2. 创建一个派生访问者类WriteHtmlVisitor来编写整个文件,该文件将visitHTML数据结构中的每个元素。

第二种方法:

我也可以使用类WriteHtmlFile,具有HTMLElement的对象,然后使用所有元素的getter编写它。

这是编写HTML文件并在文件中添加新元素的最佳方法。

我只是在寻找一个建议,因为这处于设计阶段。

谢谢。

是的,您的访问者布局将起作用,并且在 IntelliJ IDEA 的插件中,我们一直在使用它。

举一个具体的例子:在 IDEA 中,我们在编辑器中有一个代码的抽象语法树。使用递归访问者,您可以将每个元素转换为其字符串表示形式,并将工作分发到许多易于理解的小方法中。每个visitXXX只是将一小部分转换为字符串,并以递归方式调用visit方法。

优点是易于理解和调试。我遇到过的唯一缺点是您需要对基类中的所有元素类型使用访问方法。但是,一旦设置,它就像一个魅力。

我可以给你Java代码来查看,虽然它是IDEA特定的,但它应该足够清晰,可以理解它。下面是访问者为所有可能的元素定义方法的基类。下面是您的想法的示例:将元素转换为字符串表示的访问者。

希望这有所帮助,您不介意Java代码。