C# 使用枚举和继承的工厂设计模式
我有一个概念上的问题。我想使用设计模式工厂,使用枚举来知道要创建什么类型的对象。但当涉及到在另一个程序集中继承时,我会坚持使用枚举 让我来解释一个案例: 我正在为管理成果的多个项目创建一个框架 我创建了一个由抽象类C# 使用枚举和继承的工厂设计模式,c#,inheritance,enums,factory,C#,Inheritance,Enums,Factory,我有一个概念上的问题。我想使用设计模式工厂,使用枚举来知道要创建什么类型的对象。但当涉及到在另一个程序集中继承时,我会坚持使用枚举 让我来解释一个案例: 我正在为管理成果的多个项目创建一个框架 我创建了一个由抽象类Fruit实现的接口IFruit,它将从中继承草莓、苹果和梨 我创建了一个枚举水果类型,其中包含草莓、苹果和梨 我使用虚拟方法创建水果工厂: GiveMeANewFruit(水果类型newFruit)返回一个IFruit 一切都好 我把我的框架发送到世界各地,我们西班牙工厂的人也需要管
Fruit
实现的接口IFruit
,它将从中继承草莓
、苹果
和梨
我创建了一个枚举水果类型
,其中包含草莓
、苹果
和梨
我使用虚拟方法创建水果工厂
:
GiveMeANewFruit(水果类型newFruit)
返回一个IFruit
一切都好
我把我的框架发送到世界各地,我们西班牙工厂的人也需要管理
他将创建继承水果的Banana
类
他将创建一个SpanishFruitFactory
,它将继承FruitFactory
,并重新定义虚拟方法GiveMeANewFruit
,下面是该方法中可能包含的代码:
Public Override IFruit GiveMeANewFruit(FruitTypes newFruit)
{
if (newFruit == FruitTypes.Banana)
return new Banana();
else
return base.GiveMeANewFruit(newFruit);
}
但是,问题来了。我知道像C#这样的语言不允许继承枚举。因此,我的人不能将香蕉
值添加到水果类型
枚举中
那么,替换枚举的最佳模式是什么,这样我就可以向外部世界提供向我的概念中添加新对象类型的能力
知道我不希望有任何源代码之外的内容(没有XML文件、数据库或任何其他提供类型列表的内容)
你有什么建议吗?我认为最好的替代品是
静态类。我在php
中就是这样做的。
使用字段定义静态类
,而不是枚举
,如果愿意,您甚至可以将字段定义为字符串
。更改工厂方法以接受int
,并使用以下类实现枚举:-
public class FruitTypes
{
public const int Strawberry = 1;
public const int Apple = 2;
public const int Pear = 3;
}
public class SpanishFruitTypes : FruitTypes
{
public const int Banana = 4;
}
用法示例:-
factory.GiveMeANewFruit(FruitTypes.Pear)
factory.GiveMeANewFruit(SpanishFruitTypes.Banana)
这不是java,而是使用MEF。下面是对MEF的一个介绍:@clcto简单地说“使用MEF”,但绝对没有说明您所指的内容或其相关性,这并没有什么帮助。我真的不知道珠峰基金会与这个有什么关系。你看过这个吗?-或者-这些可以做吗??西拉米克我会用John Bustos评论中的第二个链接。