Design patterns 序列化对象生成器与访问者的设计模式是什么?

Design patterns 序列化对象生成器与访问者的设计模式是什么?,design-patterns,builder,visitor,visitor-pattern,builder-pattern,Design Patterns,Builder,Visitor,Visitor Pattern,Builder Pattern,我试图通过例子来学习OOPS。因此,我尝试实现一个对象序列化器。该对象是相同的,但可以序列化为XML、JSON等。我看到了两种类型的建议 在这个博客中,他们说我们可以使用visitor/double dispatch来序列化对象 但是,根据定义,我们是从复杂对象构建序列化对象,因此创建XMLBuilder和JSONBuilder是有意义的 现在,哪种方法是正确的 学习设计模式的目的是让你的工具包充满解决方案的想法,而不是在解决测试问题时遵循教条 在现实世界中,很少有完美的选择。你必须权衡取舍,

我试图通过例子来学习OOPS。因此,我尝试实现一个对象序列化器。该对象是相同的,但可以序列化为XML、JSON等。我看到了两种类型的建议

在这个博客中,他们说我们可以使用visitor/double dispatch来序列化对象

但是,根据定义,我们是从复杂对象构建序列化对象,因此创建XMLBuilder和JSONBuilder是有意义的


现在,哪种方法是正确的

学习设计模式的目的是让你的工具包充满解决方案的想法,而不是在解决测试问题时遵循教条

在现实世界中,很少有完美的选择。你必须权衡取舍,决定哪种方法最适合当前的情况

为什么不尝试这两种方法,并评估您喜欢的方法

for The Visitor模式提供了一个很好的概述,说明了您可能希望选择Visitor模式的原因。“用例示例”特别适用于您的问题

此类型层次结构上的一个基本操作是将图形保存为系统的原始文件格式

同样,也可以应用。但请注意,此模式的重点是从多个源创建复杂的输出。生成器将正在进行的工作的概念形式化,允许您收集状态,直到可以生成输出对象为止


我认为访客模式更符合您的需求。但是,选择取决于你——这就是软件开发的美丽(和诅咒)

学习设计模式的目的是让你的工具包充满解决方案的想法,而不是在解决测试问题时遵循教条

在现实世界中,很少有完美的选择。你必须权衡取舍,决定哪种方法最适合当前的情况

为什么不尝试这两种方法,并评估您喜欢的方法

for The Visitor模式提供了一个很好的概述,说明了您可能希望选择Visitor模式的原因。“用例示例”特别适用于您的问题

此类型层次结构上的一个基本操作是将图形保存为系统的原始文件格式

同样,也可以应用。但请注意,此模式的重点是从多个源创建复杂的输出。生成器将正在进行的工作的概念形式化,允许您收集状态,直到可以生成输出对象为止


我认为访客模式更符合您的需求。但是,选择取决于你——这就是软件开发的美丽(和诅咒)

尽管比尔·比克福德(Bill Bickford)和维基(Wiki)的例子给出了上述的答案,但我们可能需要后退一步

您完全不需要BuilderVisitor来创建像XMLBuilder或JSONBuilder这样的序列化程序。CodeBetter链接上的示例试图演示双重调度及其与访客模式的关系。在我看来,他的例子充其量是令人困惑的

例如,C#XMLSerialiser对象将构造对象的任何类型的对象转换为XML文档。没有访客或任何其他模式!如果需要,有一个单独的过程来持久化序列化文档(到任何存储类型),当您在一个对象数组上组合这些操作(序列化和持久化)时,这就是Visitor适用的地方

访问者模式允许另一个对象“访问”并执行存储操作,而不是教会数组中的每个对象如何以一系列可能的格式存储自身。这几乎就是Wiki访问者的例子,它展示了如何持久化不同的形状对象,而每个形状都不知道如何保存自己


因此,您可以独立于访问者或构建器来研究序列化,因为它们不相关。。。我想这是你怀疑的!如果您不熟悉模式,访客是最难理解的模式之一,

尽管比尔·比克福德(Bill Bickford)和维基示例的回答很有学问,但可能需要后退一步

您完全不需要BuilderVisitor来创建像XMLBuilder或JSONBuilder这样的序列化程序。CodeBetter链接上的示例试图演示双重调度及其与访客模式的关系。在我看来,他的例子充其量是令人困惑的

例如,C#XMLSerialiser对象将构造对象的任何类型的对象转换为XML文档。没有访客或任何其他模式!如果需要,有一个单独的过程来持久化序列化文档(到任何存储类型),当您在一个对象数组上组合这些操作(序列化和持久化)时,这就是Visitor适用的地方

访问者模式允许另一个对象“访问”并执行存储操作,而不是教会数组中的每个对象如何以一系列可能的格式存储自身。这几乎就是Wiki访问者的例子,它展示了如何持久化不同的形状对象,而每个形状都不知道如何保存自己


因此,您可以独立于访问者或构建器来研究序列化,因为它们不相关。。。我想这是你怀疑的!如果您不熟悉模式,访问者是最难掌握的对象之一,..

对象(接受者)知道它的结构,序列化器(访问者)知道如何写下基本/简单类型。两个组合