2011-03-22 93 views
0

我必須爲客戶編寫2個文本文件。這些文件包含我們數據庫的信息。我們的應用程序正在被許多客戶使用,因此不會爲每個客戶編寫這兩個文件。有些只是得到第一個文件,有些也是第二個文件。文件結構因客戶不同而不同,這就是爲什麼我用抽象方法爲抽象類編寫以及爲每個客戶指定了寫入方法的特定類。這是針對所有客戶的第一個文件,只是內容和結構不同而已。這是裝飾者模式的一個很好的用法嗎?

abstract class CustomerWriter 
{ 
    //... 
    abstract Write(); 
    //... 
} 

然後,我有2個類繼承了那個。這很好,我猜。現在只需要爲某些客戶編寫第二個文件...在這裏使用裝飾器模式併爲第一個文件裝飾類是一個好主意?它不是相同的基類(CustomerWriter)。我不確定這對我的情況來說太過分了,這就是爲什麼我問。

我將如何裝飾第一個文件的特定類?

感謝:-)

回答

0

你怎麼樣登記立足於客戶的配置某處所有允許文件編寫者,然後你執行所有註冊的作家呢?

更新:你可以使用一個IoC容器爲,但一個簡單的

public class FileWriterRegistry 
{ 
    public void Register(CustomerWriter writer) 
    { 
    } 

    public void WriteAllFiles() 
    { 
     ... call Write() for each registered writer 
    } 
} 

可能會做。

+0

可能會做,但我上面添加第二個文件,我有anoher基類...它不是一個CustomerWriter。 – grady 2011-03-22 08:01:48

+0

但它給了我一個想法......我可以做到這一點只是爲了第二。這將是很好,如果這是可配置的我的配置文件...有沒有一個常見的方法來做到這一點? – grady 2011-03-22 08:03:48

+0

那麼,爲什麼你的第二個文件的作者有不同的基類?第二個概念不同?如果你需要另一個基類(無論出於什麼原因),那麼你可以考慮爲你所有的作者引入一個ICustomerWriter接口。至於配置文件:我不認爲有這樣做的常見方式。如果您使用IoC容器,那麼這些容器通常會支持某種xml配置,但您可能只需添加一些設置即可選擇所有適用的作者。 – ChrisWue 2011-03-22 08:23:36

0

如果您無法重構第二個寫入程序以共享公共基類或接口,則可能實際上需要使用適配程序模式。你可以寫一個適配器,使第二個作家看起來像是一個CustomerWriter。這樣你的客戶可以使用一個通用的基類或接口(甚至更好)。然後,您可以使用IoC容器來配置客戶端實例化的實例。

適配器會是這個樣子:

public SecondWriterAdapter : CustomerWriter 
{ 
    private SecondWriter writerInstance; 
    public SecondWriterAdapter(SecondWriter writerInstance) 
    { 
     this.writerInstance = writerInstance; 
    } 

    public override void Write() 
    { 
     writerInstance.someExistingWriteMethod(); 
    } 
} 
相關問題