抽象类用哪个具体类?设计问题
本文关键字:问题 抽象类 | 更新日期: 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,而实现细节仍然是隐藏的。