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

  • 相关阅读:
    矩阵快速幂 HDU3483
    欧拉函数 求小于某个数并与其互质的数的个数
    扩展欧几里德算法求逆元3
    拓展欧几里德算法求逆元2
    【20140113-2】MyEclipse生成javadoc时出错:编码GBK的不可映射字符
    【131202】SQL
    【20140113】package 与 import
    系统架构等级
    ora-01658 :无法为表空间USERS 中的段创建INITIAL区
    WMSYS.WM_CONCAT 函數的用法
  • 原文地址:https://www.cnblogs.com/yuanws/p/1341244.html
Copyright © 2011-2022 走看看