使用不同类型实现相同的行为

时间:2011-05-06 07:20:16

标签: java polymorphism

好的,首先在Java中完成: 我反序列化一个文本文件。每一行都会从完全不同的类层次结构中生成一个对象。 然后我将这些对象提供给另一个对象,让我们称之为“Writer”,它有一个名为“write(x)”的方法,然后将该对象的一部分序列化为另一种格式。 因为每个反序列化的对象来自不同的类层次结构,所以我无法使用相同的编写器处理每个对象(每次的内容也略有不同,所以没关系)。但困扰我的是,在指导整个过程的客户中,我必须区分不同的对象。

有没有办法,所以“作家”可以自己决定做什么,而不让客户为他做这项工作......

也许一些伪代码会有所帮助。

for(Line line : lines) {
  x = one of several kinds of objects is instantiated;
  w = one of several kinds of Writers is instantiated, analog to x;
  w.write(x);
}

理想情况下,我的代码看起来像这样,但实际上,每一行(除了最后一行)都是一个switch语句,因为我必须区分对象......

我希望这不要混淆。

1 个答案:

答案 0 :(得分:2)

通常,在这种情况下,您应该创建一个接口Writer:

public interface Writer {

  void write(Object o);

}

抽象类AbstractWriter,它做了一些常见的工作,然后是许多扩展这个AbstractWriter的类。

然后创建一个Factory类,它将根据您的对象类型创建一个必要的编写器:

public class Factory {

  private Factory() {}

  public static Writer createWriter(Object o) {
    Writer result = null;
    if (o.getClass() == MyObject1.class) {
       result = new MyFirstObjectWriter();
    } else if (...) {
       ...
    } else {
       throw new IllegalArgumentException("Unsupported object class" + o.getClass());
    }
    return result;
  }
}

然后客户端代码将如下所示:

for (Line line : lines) {
  Object o = readObject(line);
  Factory.getWriter(o).write(o);
}