2011-03-22 91 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(); 
    } 
} 
相关问题