什么设计模式是分离变换转换器

时间:2012-09-25 14:07:27

标签: java design-patterns

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

对于不同类型的对象(例如基本类型,集合,null等),我定义了每个转换器,它对于给定的类型是合适的。通过这种方式,它可以轻松扩展,而无需向巨大的if-else-then构造添加代码。

通过一种方法选择转换器,该方法根据对象可转换并使用优先级排序来测试。优先顺序很重要,所以假设POJO转换器不会转换List,即使它是可转换的,使用收集转换器也更合适。

这是什么设计模式?

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

1 个答案:

答案 0 :(得分:4)

好吧,您可以先尝试对要执行的操作进行分类(输出XML文件,将某些内容转换为某些内容)。设计模式分为三类:

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

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

现在,一个类到xml的实际转换是由几个类完成的。你提到你有一个方法来测试类并将它们引导到特定的转换器。这个类可以争论创建一个新的实例,所以它属于创建模式。

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

  
      
  • 抽象工厂模式,提供用于创建相关或从属对象的接口,而无需指定对象的具体类。

  •   
  • 构建器模式,它将复杂对象的构造与其表示分开,以便相同的构造过程可以创建不同的表示。

  •   
  • 工厂方法模式,允许类将实例化推迟到子类。

  •   
     

来源: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");
}

在任何一种情况下,返回项目的实际类型都不重要。这取决于你想要“定义模式”的位置。是在切换类型的方法中,还是在实际的创建/转换器类中。

然后,我不是这方面的专家。