实现可以具有不同参数组合的工厂

时间:2014-04-13 16:52:55

标签: c# factory

我正在尝试实施一种生成报告的工厂方法。

为此,我创建了一个名为IReport的接口,一个ReportType枚举,详细说明了可用的不同报告和ReportFactory类。

根据报告的类型,你可以调用一个返回IReport对象的GenerateReport方法:

IReport GenerateReport(ReportType reportType);

但是,不同的报告需要不同的参数。

  • 某些报告只需要开始日期和结束日期。
  • 详细说明特定订单的报告需要订单ID
  • 另一份报告需要客户ID和订单ID
  • 和一些

问题:

我是否必须为每种报告类型创建不同的GenerateReport方法?

创建一个名为ReportParameters的类是否一个坏主意,该类具有所有可能的参数,并且工厂方法根据报告类型知道要使用哪些参数?

例如

class ReportParameters
{
ReportType RepType;
DateTime StartDate;
DateTime EndDate;
int CustomerID;
int OrderID;
}

然后使用

IReport GenerateReport(ReportParameters params);

非常感谢任何评论

1 个答案:

答案 0 :(得分:0)

你说:

  

创建一个名为ReportParameters的类是不是一个坏主意   所有可能的参数和工厂方法都知道哪些参数   根据报告类型使用?

我并不是特别这么认为。这对我来说听起来像是一种工厂。我对此有两点想法:

  1. 您可以为不同的报告提供此ReportParameters的子类,这些子类可以提供帮助工厂确定如何创建此类报告的方法
  2. 工厂并不是创造事物的唯一手段。您也可以调查builders
  3.   

    Builder设计模式的目的是分离   从其表示构造复杂对象。通过这样做,   相同的构造过程可以创建不同的表示。