我必须为客户写2个文本文件。这些文件包含来自我们DB的信息。我们的应用程序正被许多客户使用,因此不会为每个客户编写这两个文件。有些只是获得第一个文件,有些只是第二个文件。文件结构因客户而异,这就是为什么我使用抽象方法 Write 创建一个抽象类,并为每个客户创建一个特定的类来解决Write方法。这是第一个适用于所有客户的文件,只是具有不同的内容和结构。
abstract class CustomerWriter
{
//...
abstract Write();
//...
}
然后我有2个继承自那个的类。多数民众赞成我猜。现在为第二个只需要为某些客户编写的文件......在这里使用装饰器模式并为第一个文件装饰类是个好主意吗?它不是同一个基类(CustomerWriter)。我不确定这对我的情况来说是否太多了,这就是我要问的原因。
我如何为第一个文件装饰特定的类?
谢谢: - )
答案 0 :(得分:0)
如何根据客户配置在某处注册所有允许的文件编写器,然后执行所有已注册的编写器?
更新:您可以使用IoC容器,但只需一个简单的
public class FileWriterRegistry
{
public void Register(CustomerWriter writer)
{
}
public void WriteAllFiles()
{
... call Write() for each registered writer
}
}
可能会这样做。
答案 1 :(得分:0)
如果您无法重构第二个编写器以共享公共基类或接口,您可能实际上想要使用适配器模式。您可以编写一个适配器,使第二个编写器看起来像CustomerWriter。这样,您的客户端可以使用一个公共基类或接口(甚至更好)。然后,您可以使用IoC容器来配置客户端实例化的实例。
适配器看起来像这样:
public SecondWriterAdapter : CustomerWriter
{
private SecondWriter writerInstance;
public SecondWriterAdapter(SecondWriter writerInstance)
{
this.writerInstance = writerInstance;
}
public override void Write()
{
writerInstance.someExistingWriteMethod();
}
}