好的,首先在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语句,因为我必须区分对象......
我希望这不要混淆。
答案 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);
}