use*_*153 2 c# architecture oop abstract-class design-patterns
我有一个设计问题.我正在修改现有代码以及我在实例化新类的地方.由于将课程变成了我能理解的抽象课,这给了我错误.它会抛出错误,因为您无法创建抽象类的实例.
我在下面有这个代码
ExampleProcessor pro = new ExampleProcessor();
Run Code Online (Sandbox Code Playgroud)
但ExmapleProcessor类现在变成了抽象类.
public abstract class ExmapleProcessor {
public abstract void Method1();
public abstract void Method2();
}
Run Code Online (Sandbox Code Playgroud)
子类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 }
}
Run Code Online (Sandbox Code Playgroud)
所以这一行导致42个错误"ExampleProcessor pro = new ExampleProcessor();" 在我的申请中到处都是
我不想这样做
AExampleProcessor pro = new AExampleProcessor();
Run Code Online (Sandbox Code Playgroud)
和
BExampleProcessor pro = new BExampleProcessor();
Run Code Online (Sandbox Code Playgroud)
因为我希望我的应用程序决定使用哪个类.我怎样才能使它加载正确的类?
我想代码示例请..
创建工厂:
public static class ExampleProcessorFactory
{
public static ExampleProcessor Create()
{
if(IsFullmoon)
return new ExampleProcessorA();
else
return new ExampleProcessorB();
}
}
Run Code Online (Sandbox Code Playgroud)
然后将所有来电替换为new ExampleProcessor()来电ExampleProcessorFactory.Create().现在,您已经封装了实例化逻辑,并选择了要实例化的具体类到一个可以应用任何逻辑来决定要实例化的类的地方.(决定何时使用哪一类可能会从一些改进中获益而与满月无关的逻辑.)