我想基于枚举标志创建一个对象。
以下是示例代码:
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。它应该创建WorkflowTwo。
此外,我只想创建一个变量,所以我不想创建某种:
if (workflowBasic.Flag == WorkflowFlag.One)
{
var objectTest = new WorkflowOne(1);
}
else if (workflowBasic.Flag == WorkflowFlag.Two)
{
var objectTest = new WorkflowTwo(2);
}
如果不清楚,请告诉我。
答案 0 :(得分:2)
您所描述的要求称为"abstract factory" design pattern。您可以将枚举提供给抽象工厂,它会返回相关的工作流对象。
您可能会发现您的工作流程属于"strategy" design pattern。我建议他们都应该实现一个通用接口。
有很多方法可以实现这一点。一个示例是创建具有枚举值作为参数的属性。使用相关枚举将此属性附加到每个工作流类。然后,抽象工厂可以使用反射来查找实现工作流界面的类,并且还具有包含所需枚举值的属性。
我建议添加单元测试以确保每个枚举值都有一个实现。