use*_*098 4 c# design-patterns
我想要做的是选择适当的类来实例化基于传入的括号.目前我有两个类(ClassA和ClassB)并根据括号使用2种方法调用这些im.我想要实现的是只使用一种方法基于传递的字符串括号实例化ClassA或ClassB.
我真的不知道如何传回类对象使用..
我的方法是在方法A中调用类来实例化然后我可以使用它.ClassA myclass = new ClassA();
我确实考虑使用以下但我不(如果我诚实)知道如何实例化对象o或在MyMethod传回它时使用它.object o似乎不允许我访问A类或B类中的公共字符串方法.
public class ClassA
{
public ClassA()
{
//Do something for Class A
}
public string msgA()
{
return "Here is msg A";
}
}
public class ClassB
{
public ClassB()
{
//Do something for Class B
}
public string msgB()
{
return "Here is msg B";
}
}
private string MyMethod()
{
object o = GetClassToInstantiate("ClassA");
//Use object o
}
private object GetClassToInstantiate(string parameter)
{
object temp = null;
switch (parameter)
{
case "ClassA":
temp = new ClassA();
break;
}
return temp;
}
Run Code Online (Sandbox Code Playgroud)
任何建议如何我可以解决这个可能非常容易的情况.
Tam*_*ege 14
你需要的是基类中的工厂方法:
enum ClassType { ClassA, ClassB }
class ClassBase
{
public static ClassBase Create(ClassType classType)
{
switch (classType)
{
case ClassType.ClassA: return new ClassA();
case ClassType.ClassB: return new ClassB();
default: throw new ArgumentOutOfRangeException();
}
}
}
class ClassA : ClassBase
{
}
class ClassB : ClassBase
{
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请查看有关Factory方法模式的Wikipedia文章.
我将为您的类使用一个公共接口,并使用一个通用的工厂方法使用一个单独的工厂类,如下所示:
class Program
{
static void Main(string[] args)
{
IAnimal animal = AnimalFactory.CreateAnimal<Dog>();
animal.Speak();
Console.ReadKey();
}
}
public abstract class AnimalFactory
{
public static IAnimal CreateAnimal<T>() where T : IAnimal, new()
{
return new T();
}
}
public interface IAnimal
{
void Speak();
}
public class Dog : IAnimal
{
public void Speak()
{
Console.WriteLine("Woof");
}
}
public class Cat : IAnimal
{
public void Speak()
{
Console.WriteLine("Meow");
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6665 次 |
最近记录: |