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

  • 相关阅读:
    mybatis+spring报错PropertyAccessException 1: org.springframework.beans.MethodInvocationException
    jQuery实现判断li的个数从而实现其他功能
    移动平台对 meta 标签的定义
    移动平台对 meta 标签的定义
    HTML5手机网站开发页面宽度解决方案
    HTML5手机网站开发页面宽度解决方案
    别做“不会思考的码农”
    别做“不会思考的码农”
    myeclipse+spket1.6+Extjs4.2开发环境搭建
    myeclipse+spket1.6+Extjs4.2开发环境搭建
  • 原文地址:https://www.cnblogs.com/yuanws/p/1341244.html
Copyright © 2011-2022 走看看