反射实现抽象工厂

  上篇我们说了接口工厂,接下来我们看看抽象工厂

     抽象类用abstract修饰,

     抽象类不能被实例化,抽象方法必须声明在抽象类中,抽象类型不一定不需存在抽象方法,具体派生类必须覆盖基类的抽象方法,抽象派生类可以覆盖基类的抽象方法也可以不覆盖

     这样我们就实现了在基类中添加error方法,子类中无需添加,只需要传error信息就行

     调用方法:

    ICarStract carStract = TcFactory_.GetCarInstance("BenzStract");
        carStract.run();
        carStract.stop();
        carStract.error("BenzStract ");       --基类的error方法

--------------------------

public class TcFactory_

{    

  public TcFactory_()    

  {         //         //TODO: 在此处添加构造函数逻辑         //    

  }    

  public static ICarStract GetCarInstance(string className)    

  {        

    ICarStract car = null;        

    Type type = Type.GetType(className);        

    car = (ICarStract)Activator.CreateInstance(type);        

    return car;    

  }

}

public class BenzStract : ICarStract

{    

  public override void run()    

  {        

    HttpContext.Current.Response.Write("BenzStract run<br/>");    

  }

  public override void stop()    

  {        

    HttpContext.Current.Response.Write("BenzStract stop<br/>");    

  }    

  public void testBenz()    

  {        

    HttpContext.Current.Response.Write("BenzStract test<br/>");    

  }

}

public class BmwStract : ICarStract

{

    public override void run()    

  {        

    HttpContext.Current.Response.Write("BmwStract stop<br/>");    

  }

    public override void stop()    

  {        

    HttpContext.Current.Response.Write("BmwStract stop<br/>");    

  }

}

public abstract class ICarStract

{    

  public abstract void run();    

  public abstract void stop();    

  public void error(string str)    

  {        

    HttpContext.Current.Response.Write(str + "error<br/>");    

  }

}

原文地址:https://www.cnblogs.com/ajun/p/2815957.html