上篇我们说了接口工厂,接下来我们看看抽象工厂
抽象类用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/>");
}
}