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/>");    

      }

    }

  • 相关阅读:
    cmake的find_package()简单总结
    C++的模板类:不能将定义与声明写在不同文件中
    C++的模板类:不能将定义与声明写在不同文件中
    SLAM的评测工具evo
    ubuntu安装opencv3.2
    ROS的Target Platforms
    git push的时候.gitignore不起作用的解决方法
    利用zed相机为rtabmap_ros录制rosbag包及其使用
    .pcd格式点云文件的显示
    记录一下mariadb设置主从同步的过程[虚拟机测试]
  • 原文地址:https://www.cnblogs.com/ajun/p/2815957.html
Copyright © 2011-2022 走看看