zoukankan      html  css  js  c++  java
  • 反射实现抽象工厂

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

         抽象类用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/>");    

      }

    }

  • 相关阅读:
    failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected 排坑指南
    使用labelme制作自己的数据集
    linux安装anaconda3 conda: command not found
    windows端运行.sh脚本
    安装easydict
    tensorflow安装排坑笔记
    Dev怎么调试,怎么调试不了???
    NameError: name 'QApplication' is not defined 的解决办法
    绝对路径和相对路径
    关于Pycharm总是Indexing很久的问题
  • 原文地址:https://www.cnblogs.com/ajun/p/2815957.html
Copyright © 2011-2022 走看看