【发布时间】:2012-01-22 07:08:07
【问题描述】:
我的项目中有一组类(遵循策略模式)。在主函数中,我从服务器接收一个枚举值,并在此基础上创建一个基类类型的对象。
我正在使用 switch/case 语句来实现这一点。我在某处读到,打开/关闭原则不允许在添加新类时打开函数来添加新的 case 语句。
我正在考虑使用Activator.CreateInstance()。有什么缺点吗。
还有其他方法可以从枚举类型创建对象吗?
在下面添加示例,即使它不是一个完整的策略模式
abstract public class Mammal
{
public abstract void MakeSound()
}
class Cat:Mammal
{
public override void MakeSound()
{
Console.WriteLine("Meow");
}
}
class Dog:Mammal
{
public override void MakeSound()
{
Console.WriteLine("Bow");
}
}
Main()
{
MammalTypes mammalType = RecieveValueFromServer();
Mammal mammalBase
switch(mammalType) // need to make this dynamic depending upon Enum type
{
case MammalTypes.Cat:mammalBase = new Cat()
break;
case MammalTypes.Dog:mammalBase = new Dog()
break;
}
mammalBase.MakeSound()
}
【问题讨论】:
-
它不是面向对象的。基类不应该知道它的派生类。
-
很难想象你做了什么。请将您编写的代码添加到您的问题中。
标签: c# oop design-patterns