【发布时间】:2010-01-04 22:25:48
【问题描述】:
我正在尝试为我的公司创建一个基于 Web 的工具,该工具本质上是使用地理输入来生成表格结果。目前,三个不同的业务领域使用我的工具并获得三种不同的输出。幸运的是,所有的输出都是基于相同的主表 - 子表的思想,它们甚至共享一个共同的主表。
不幸的是,在每种情况下,子表的相关行都包含截然不同的数据。因为这是唯一的争论点,所以我将FetchChildData 方法提取到一个名为DetailFinder 的单独类中。结果,我的代码如下所示:
DetailFinder DetailHandler;
if (ReportType == "Planning")
DetailHandler = new PlanningFinder();
else if (ReportType == "Operations")
DetailHandler = new OperationsFinder();
else if (ReportType == "Maintenance")
DetailHandler = new MaintenanceFinder();
DataTable ChildTable = DetailHandler.FetchChildData(Master);
其中 PlanningFinder、OperationsFinder 和 MaintenanceFinder 都是 DetailFinder 的子类。
我刚刚被要求添加对另一个业务领域的支持,我不想继续这种if 阻止趋势。我更希望有一个如下所示的解析方法:
DetailFinder DetailHandler = DetailFinder.Parse(ReportType);
但是,我不知道如何让 DetailFinder 知道处理每个字符串的子类,甚至知道存在哪些子类,而无需将 if 块转移到 Parse 方法。有没有办法让子类用抽象 DetailFinder 注册自己?
【问题讨论】:
标签: c# factory-pattern strategy-pattern