抽象类用哪个具体类?设计问题

本文关键字:问题 抽象类 | 更新日期: 2023-09-27 18:15:41

我有一个设计问题。我正在修改现有的代码和我正在实例化新类的地方。它给了我错误,由于把类变成一个抽象类,我可以理解。它抛出了一个错误,因为你不能创建抽象类的实例。

我在

下面写了这段代码
ExampleProcessor pro = new ExampleProcessor();

但是ExmapleProcessor类现在变成了抽象类。

public abstract class ExmapleProcessor {
  public abstract void Method1();
  public abstract void Method2();
}

子类AExampleProcessor和beexamplepleprocessor .

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()的呼叫。现在,您已经将实例化逻辑和选择要实例化的具体类封装到一个地方,在这里您可以应用任何逻辑来决定要实例化的类。(决定何时使用哪个类的逻辑可能会受益于一些改进,与满月无关。)

因为您希望应用程序决定使用哪个具体的子类,所以我建议您使用Factory模式。
这样,客户机代码只知道您正在使用ExampleProcessor,而实现细节仍然是隐藏的。