首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

[分享]简单工厂+反射的一个学习例子,该如何解决

2012-03-19 
[分享]简单工厂+反射的一个学习例子嘿嘿,新手参考学习~~~大鸟表笑话俺,哈哈~~usingSystemnamespaceDesign

[分享]简单工厂+反射的一个学习例子
嘿嘿,新手参考学习~~~大鸟表笑话俺,哈哈~~

using   System;

namespace   DesignPatterns
{


        public   interface   Fruit   //具体产品的抽象
        {
                string   Color   {   get;set;}
        }


        public   class   Orange   :   Fruit
        {
                private   string   color;

                public   Orange(){   }

                public   string   Color
                {
                        get   {   return   color;   }
                        set   {   color   =   value;   }
                }
        }


       
        public   class   Apple   :   Fruit
        {
                private   string   color;

                public   Apple()   {   }

                public   string   Color
                {
                        get   {   return   color;   }
                        set   {   color   =   value;   }
                }
        }


        public   class   FruitFactory   //工厂类
        {
                /*==========================================================================
                  *   注意:这里的name格式为:namespace.class!否则type的返回值一定是null
                  *==========================================================================*/
                public   static   Fruit   CreateFruit(string   name)
                {
                        Fruit   fruit   =   null;
                        /*=============================================================================
                          *   System.Type类:           它对于反射起着核心的作用。我们可以使用   Type   对象的
                          *                                             方法、   字段、属性和嵌套类来查找有关该类型的所有信息。


                          *  
                          *   System.Activator类:它包含特定的方法,用以在本地或从远程创建对象类型,
                          *                                             或获取对现有远程对象的引用。
                          *=============================================================================*/
                        Type   type   =   Type.GetType(name,   false);
                        if   (type   !=   null)
                                fruit   =   (Fruit)Activator.CreateInstance(type);
                        return   fruit;
                }
        }


        class   Program
        {
                static   void   Main(string[]   args)
                {
                        Console.WriteLine( "Please   write   the   class   name   that   you   want   to   create: ");
                        string   name   =   Console.ReadLine();
                        Console.WriteLine( "OK,Try   to   create   the   class   that   named   {0} ",name);
                        Fruit   fruit   =   FruitFactory.CreateFruit(name);
                        if   (fruit   !=   null)
                                Console.WriteLine( "Success!the   class   has   been   created! ");
                        else
                                Console.WriteLine( "Failed!there   must   be   some   error! ");
                }
        }
}

测试时可以输入:DesignPatterns.Apple     or   DesignPatterns.Orange

然后就可以看见成功的输出了~~!!!

[解决办法]
学习
[解决办法]
楼主的这个算起来比较简单,下面是Head first design pattern里面的例子:
public class Pizza
{
public Pizza orderPizza(){
Pizza pizza = createPizza( "chineese ");
.............................
return pizza;
}



public abstract Pizza createPizza(string pizzatype); //工厂,更高度的抽象,由子类实现更利于扩展。适用于某一系列的对象,对于新的对象则开发新的子类
}
[解决办法]
用了反射后,效率会降低很大。。。。
[解决办法]
一些持久化框架和容器 采用类似的做法
一般+ singleton

第一次加载时略慢(比不反射)
以后都很方便

反射工厂的优点:可以动态配置,低耦合
------------------------------------------

可以看看Spring.net
[解决办法]
我觉得如果反射加泛型一起结合写项目架构的时候要同意BEM层就牛了 别传递参数

热点排行