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

本文关键字:参数 组合 工厂 一个 实现 | 更新日期: 2023-09-27 17:58:03

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

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

其想法是,根据报告的类型,您可以调用GenerateReport方法,该方法将返回IReport对象:

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);

任何意见都将不胜感激

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

你说:

创建一个名为ReportParameters的类所有可能的参数,工厂方法知道哪些参数根据报告类型使用?

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

  1. 您可以为不同的报表提供ReportParameters的子类,这些子类可以提供方法来帮助工厂确定如何创建这样的报表
  2. 工厂并不是创造事物的唯一途径。你也可以调查建筑商

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