c# - 使用基于枚举标志的构造器创建对象
问题描述
我想创建一个基于枚举标志的对象。
这是示例代码:
public class Program
{
static void Main(string[] args)
{
var workflowBasic = new WorkflowBasic(WorkflowFlag.One);
if (workflowBasic.Flag == WorkflowFlag.One)
{
// create WorkflowOne workflow
}
else if (workflowBasic.Flag == WorkflowFlag.Two)
{
// create WorkflowTwo workflow
}
// TODO: rest action on created variable
}
}
public class WorkflowOne
{
public int Count { get; set; }
public WorkflowOne(int count)
{
Count = count;
}
}
public class WorkflowTwo
{
public int Count { get; set; }
public WorkflowTwo(int count)
{
Count = count;
}
}
public class WorkflowBasic
{
public WorkflowFlag Flag { get; set; }
public WorkflowBasic(WorkflowFlag flag)
{
Flag = flag;
}
}
public enum WorkflowFlag
{
One = 1,
Two = 2
}
因此,对于 WorkflowFlag.One,它应该创建 WorkflowOne 对象,对于 WorkflowFlag.Two,它应该创建 WorkflowTwo。
此外,我只想创建一个变量,所以我不想创建某种:
if (workflowBasic.Flag == WorkflowFlag.One)
{
var objectTest = new WorkflowOne(1);
}
else if (workflowBasic.Flag == WorkflowFlag.Two)
{
var objectTest = new WorkflowTwo(2);
}
如果有不清楚的地方,请告诉我。
解决方案
您描述的要求是一种称为“抽象工厂”的设计模式。您将枚举提供给抽象工厂,它会返回相关的工作流对象。
您可能会发现您的工作流程是“策略”设计模式的一个案例。我建议他们都应该实现一个通用接口。
有很多方法可以实现这一点。一个示例是创建一个以枚举值作为参数的属性。使用相关枚举将此属性附加到每个工作流类。然后抽象工厂可以使用反射来找到实现工作流接口的类,并且还具有具有所需枚举值的属性。
我建议添加单元测试以确保每个枚举值都有一个实现。
推荐阅读
- ssis - SSIS - 在生成的包中使用项目连接管理器
- mailchimp - Mailchimp API 403 禁止错误
- excel - 错误 1004 - 文件复制/名称更改后在 OLAP 多维数据集中找不到项目
- loops - 函数的批量定义,或如何绘制光谱
- java - 将 HashMap 写入 CSV 文件
- java - 用于多节点编辑的 TreeCellEditor
- scala - 动态实例化类scala
- arrays - 从另一个工作表的列中捕获文本 - Excel
- java - Json 数据显示在浏览器上,但通过 HttpUrlConnection 返回错误(500:内部服务器错误)
- facebook - Facebook登录颤动应用程序错误