2011-05-06 89 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); 
} 
相關問題