2011-05-06 35 views
1

好的,首先这是用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); 
} 

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

我希望这是不要混淆。

回答

2

通常,在这种情况下,你应该创建一个接口编剧:

public interface Writer { 

    void write(Object o); 

} 

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

然后创建一个工厂类,这将相应地创建一个必要的作家对象类型:

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); 
} 
相关问题