我需要在我的设计中访问模式吗?
Do I need to visitor pattern in my design
我正在设计HTML解析器用于研究目的。我首先创建整体设计的地方。
用于存储 HTML 元素的数据结构。
Base
: HtmlBaseElement
Derived
: HTMLElement, PElement, HtagElemement, ImgElement, BodyElement, StrongElement
基本上,我将为 HTML 中的每种类型的元素创建一个派生类。
我需要将此 HTML 文件写回文件,并允许用户在已解析的 HTML 文件中添加元素。
这就是我在想的:
第一种方法:
创建一个BaseVisitor
,该对每种类型的元素都具有访问功能。
创建一个派生访问者类
WriteHtmlVisitor
来编写整个文件,该文件将visit
HTML数据结构中的每个元素。
第二种方法:
我也可以使用类WriteHtmlFile
,具有HTMLElement
的对象,然后使用所有元素的getter编写它。
这是编写HTML文件并在文件中添加新元素的最佳方法。
我只是在寻找一个建议,因为这处于设计阶段。
谢谢。
是的,您的访问者布局将起作用,并且在 IntelliJ IDEA 的插件中,我们一直在使用它。
举一个具体的例子:在 IDEA 中,我们在编辑器中有一个代码的抽象语法树。使用递归访问者,您可以将每个元素转换为其字符串表示形式,并将工作分发到许多易于理解的小方法中。每个visitXXX
只是将一小部分转换为字符串,并以递归方式调用visit
方法。
优点是易于理解和调试。我遇到过的唯一缺点是您需要对基类中的所有元素类型使用访问方法。但是,一旦设置,它就像一个魅力。
我可以给你Java代码来查看,虽然它是IDEA特定的,但它应该足够清晰,可以理解它。下面是访问者为所有可能的元素定义方法的基类。下面是您的想法的示例:将元素转换为字符串表示的访问者。
希望这有所帮助,您不介意Java代码。
- 用于在并发环境中访问 MMIO 的软件模式
- 针对跨模式访问的 SIMD 优化
- D 指针/pimpl 模式基类指针访问派生类成员
- 使用访问者设计模式在N- ARY树中重复访问子节点值
- 为什么在发布模式下无法访问 for 循环,但在调试中它工作正常
- 在DEBUG模式下调整字节字段大小时发生访问冲突
- 我需要在我的设计中访问模式吗?
- 如何在Meyers Singleton模式中访问衍生的构造函数
- 从用户应用程序访问环0模式(以及Borland允许这样做的原因)
- 使用自定义模式进行序列化,并使用Boost进行随机访问
- 数据库访问对象设计模式
- Windows高速模式(C++):等待信号量(WaitForSingleObjectEx):失败,访问被拒绝[部分解决]
- scoped_lock访问资源的优雅模式
- 具有多个可访问参数的C++访客模式
- 如何优化间接基数排序?(又名如何优化不可预测的内存访问模式)
- 用于独立访问器/赋值器接口的C++设计模式
- 树的const和非const版本的访问模式
- 使用不同的访问模式C++将多个指针指向同一个文件
- 引用数据类成员访问模式
- 打字员访问模式示例