繁体   English   中英

具体类使用的抽象类? 设计问题?

[英]Abstract class which concrete class to use? Design issue?

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

我在下面有这个代码

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

既然您希望应用程序决定使用哪个具体子类,我建议您使用Factory模式。
这样,客户端代码只知道您正在使用ExampleProcessor,并且实现细节仍然隐藏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM