我有一个设计问题。我正在修改现有代码以及实例化新类的位置。由于将类转换为我可以理解的抽象类,这给了我错误。它会引发错误,因为您无法创建抽象类的实例。
我在下面有这段代码
ExampleProcessor pro = new ExampleProcessor();
但是 ExmapleProcessor 类现在变成了抽象类。
public abstract class ExmapleProcessor {
public abstract void Method1();
public abstract void Method2();
}
子类 AExampleProcessor 和 BExampleProcessor。
public class AExampleProcessor : ExampleProcessor
{
public override void Method1() { //do something }
public override void Method2() { //do something }
}
public class BExampleProcessor : ExampleProcessor
{
public override void Method1() { //do something }
public override void Method2() { //do something }
}
所以这一行导致了 42 个错误“ExampleProcessor pro = new ExampleProcessor();”在我的应用程序中无处不在。
我不想做
AExampleProcessor pro = new AExampleProcessor();
和
BExampleProcessor pro = new BExampleProcessor();
因为我希望我的应用程序决定使用哪个类。我怎样才能让它加载正确的类?
请给我代码示例..
最佳答案
创建一个工厂:
public static class ExampleProcessorFactory
{
public static ExampleProcessor Create()
{
if(IsFullmoon)
return new ExampleProcessorA();
else
return new ExampleProcessorB();
}
}
然后将对 new ExampleProcessor()
的所有调用替换为对 ExampleProcessorFactory.Create()
的调用。现在您已经将实例化逻辑和选择要实例化哪个具体类的选择封装到一个地方,您可以在其中应用任何逻辑来决定要实例化哪个类。 (决定何时使用哪个类的逻辑可能会受益于一些与满月无关的改进。)
关于c# - 抽象类使用哪个具体类?设计问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8256243/