Hca*_*tek 13 c# design-patterns interface factory-method
我想返回一个接口,并在switch语句中我想设置它.这是一个糟糕的设计吗?
private IResultEntity GetEntity(char? someType)
{
IResultEntity entity = null;
switch (someType)
{
case 'L': //life
entity = new LifeEntity();
break;
case 'P': //property
entity = new PropertyEntity();
break;
case 'D': //disability
entity = new DisabilityEntity();
break;
case 'C': //credit card
entity = new CreditCardEntity();
break;
}
return entity;
}
Run Code Online (Sandbox Code Playgroud)
Rad*_*094 19
我通常不会介意工厂中的switch语句,只要我可以对我希望工厂提前创建的所有派生类进行分组和控制.
有时候,用户创建的插件可能想要将自己的类添加到该切换列表中,然后swich语句是不够的.
我找到了一些关于创建更强大/多功能工厂类的更多信息的良好来源
我通常采用的一种良好的中间方法是为每个工厂类保留一个静态的Dictionary <string,Type>.
人们可以使用某种方式"注册"他们自己的实现
Factories.TypeRegistration.StaticDictionary.Add("somekey",typeof(MyDerivedClass))
Run Code Online (Sandbox Code Playgroud)
(或者更好的是,使用注册方法并隐藏StaticDictionary)
然后,Factory可以通过在表中执行查找来轻松创建实例:
Activator.CreateInstance(Factories.TypeRegistration.StaticDictionary["somekey"]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8354 次 |
| 最近记录: |