c# - 抽象类使用哪个具体类?设计问题?

标签 c# oop design-patterns architecture abstract-class

我有一个设计问题。我正在修改现有代码以及实例化新类的位置。由于将类转换为我可以理解的抽象类,这给了我错误。它会引发错误,因为您无法创建抽象类的实例。

我在下面有这段代码

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/

相关文章:

c# - 在先前在应用程序资源中定义的新窗口中覆盖边框样式(可能是错误?)

javascript - 在类中使用 setInterval() 和 clearInterval()

java - 如何在 X 类工厂中声明方法,以便其子工厂可以使用子类 Class-1 常量?

python - 委托(delegate)在 python

c# - Linq 查询,其中将 DataTable 的第一列与第二列进行比较以查找重复项

c# - 我可以将此方法变成通用方法吗?

java - Magento 类覆盖设计模式的正式名称?

java - Java 的 Arrays.asList() 是否违反了 OOP?

java - DAO工厂 : return a new instance or always the same?

c# - 将现有代码移动到测试驱动开发