实现一个可以具有不同参数组合的工厂
本文关键字:参数 组合 工厂 一个 实现 | 更新日期: 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的类所有可能的参数,工厂方法知道哪些参数根据报告类型使用?
我不特别这么认为。对我来说,这听起来像是一种工厂。我对此有两个想法:
- 您可以为不同的报表提供ReportParameters的子类,这些子类可以提供方法来帮助工厂确定如何创建这样的报表
- 工厂并不是创造事物的唯一途径。你也可以调查建筑商
Builder设计模式的目的是将从一个复杂对象的表示来构造它。通过这样做,相同的构建过程可以创建不同的表示。