gpt4 book ai didi

java - 什么设计模式正在分离变换转换器

转载 作者:搜寻专家 更新时间:2023-11-01 02:50:13 24 4
gpt4 key购买 nike

为了将 Java 对象模型 转换为 XML,我使用了以下设计:

对于不同类型的对象(例如基本类型、集合、null 等),我为每个对象定义了自己的转换器,它根据给定的类型采取适当的行动.通过这种方式,无需向庞大的 if-else-then 结构添加代码即可轻松扩展。

转换器是通过一种方法来选择的,该方法测试对象是否完全可转换,并使用优先级排序。优先顺序很重要,所以假设一个 List 没有被 POJO 转换器转换,即使它本身是可转换的,使用集合转换器会更合适。

那是什么设计模式?

我只能想到与命令模式的相似之处。

最佳答案

好吧,您可以从尝试对您想做的事情进行分类开始(输出一个 XML 文件,将某物转换成某物)。设计模式分为三类;

在这种情况下,您有两种类型的类,一个 xml 编写器和一些转换器。 xml 编写器基本上是一个构建器(它创建一个文件)

XmlWriter writer = new XmlWriter();
writer.writeHeader();
for (Item item : xmlitems) {
writer.write(convert(item));
}
writer.close();

现在,一个类到xml的实际转换是由几个类完成的。您提到您有一种方法可以测试类并将它们定向到特定的转换器。此类可以论证为创建某物的新实例,因此它属于创建模式。

有 3 种类型的模式适合 IMO。

  • Abstract factory pattern, which provides an interface for creating related or dependent objects without specifying the objects' concrete classes.

  • Builder pattern, which separates the construction of a complex object from its representation so that the same construction process can create different representation.

  • Factory method pattern, which allows a class to defer instantiation to subclasses.

Source: Wikipedia

我觉得哪个都合适。构建器模式是合适的,因为实现有点像

public interface Converter {
void convert(Item item);
XmlTextNode getResult(); // get xml code
}

即你给全类一些东西,你就会得到一个结果。

工厂模式是合适的,因为您将实例化推迟到其他一些类(您提到的重定向方法)

public XmlTextNode convert(Item item) {
if (item instanceof ConcreteItem) {
return new ConcreteConverter(item).getResult();
}
throw new InvalidOperationException("Invalid convert type");
}

无论哪种情况,返回项目的实际类型都不重要。这在一定程度上取决于您想在哪里“定义模式”。它是在您切换类型的方法中,还是在实际的创建/转换器类中。

话说回来,我不是这方面的专家。

关于java - 什么设计模式正在分离变换转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12584702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com