zoukankan      html  css  js  c++  java
  • 简单的 反射工厂模式

    namespace ReflectionFactoryTest
    {
       public interface IFruit
        {
           void Product();
        }

     

    public class Apples:IFruit
        {
            #region IFruit 成员

            public void Product()
            {
                Console.WriteLine("Apples.....................");
            }

            #endregion
        }

     

    public class Banana:IFruit
        {

            #region IFruit 成员

            public void Product()
            {
                Console.WriteLine("Banana.....................");
            }

            #endregion
        }

     

    /// <summary>
        /// 反射工厂
        /// 反射工厂的好处是,无论我们再添加几个类,都不用修改这个工厂的方法
        /// </summary>
        public class ReflectionFactoryTest
        {
            /// <summary>
            /// 工厂的方法
            /// </summary>
            /// <param name="className"></param>
            /// <returns></returns>
            public static  IFruit CreateFruit(string className)
            {
                //加载程序集,Load()方法的参数是命名空间名,要注意大小写
                Assembly assembly = Assembly.Load("ReflectionFactoryTest");
                //通过调用CreateInstance()来生成反射的实例,参数为命名空间名.类名,返回值是object,要强制转换成相应的接口类型
                IFruit ifruit = assembly.CreateInstance(string.Format("ReflectionFactoryTest.{0}",className)) as IFruit;
                return ifruit;
            }

           
        }

     

     public class Program
        {
            static void Main(string[] args)
            {
              
                IFruit ifruit = ReflectionFactoryTest.CreateFruit("Apples");
               ifruit.Product();

            }
        }
    }

     

    1. .net中的智能引擎 和 petshop就是用得反射工厂

    2. 可以用抽象类/接口

         接口可以多重继承,但是抽象类不可以;  接口为了实现系统中的松偶合.

         抽象类与子类,是父子关系; 而接口则不是,是松偶合的关系.

         抽象类能够定义方法的实现;  接口不能包含方法的实现。

         抽象类和内部方法必须abstract 声明 而且 子类中必须override 才能覆盖

    3.3种工厂模式的区别

         简单工厂模式

         一个抽象产品类,可以派生出多个具体产品类。 
         一个具体工厂类。 

         工厂方法模式: 
         一个抽象产品类,可以派生出多个具体产品类。 
         一个抽象工厂类,可以派生出多个具体工厂类。 
         每个具体工厂类只能创建一个具体产品类的实例。 

         抽象工厂模式: 
         多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 
         一个抽象工厂类,可以派生出多个具体工厂类。 
         每个具体工厂类可以创建多个具体产品类的实例。

    4. 如果是文件所在的命名空间

    可以使用 Type type = Type.GetType("ReflectionFactoryTest.Apples", true);
           MyFruit = (IFruit)Activator.CreateInstance(type);

  • 相关阅读:
    springMVC+spring+mybatis整合(包括文件上传和下载)
    mybatis spring 框架整合
    Java AOP 注解配置与xml配置
    Java 实现分页功能
    Arcanist安装使用流程
    Swift 添加KVO
    swift 混编OC instanceType 标识的方法找不到
    Swift UIStackView代码使用
    Swift
    swift 相册PHAssetCollection,PHAsset
  • 原文地址:https://www.cnblogs.com/yuanws/p/1341244.html
Copyright © 2011-2022 走看看