On Tue, 26 Jul 2005, Lyndon Samson wrote:

> Factory is a very common pattern in the java world, in some places
> it's almost considered 'Evil (TM)' to have any sort of knowledge of
> object construction.
>
> In the Ruby world, where Classes and Objects seem to be de-emphasised,
> constructing an object with .new doesn't seem to be held as such a bad
> thing.
>
> I know there are a few IOC containers in the RubyWorld, but they dont
> seem to be overly popular.
>
> Why might this be so?

probably because 'new' is a method and really doesn't give any clue as to how
an object is contructed - this is how i generally implement factory

   class Factory
     class TypeA; end
     class TypeB; end
     class TypeC; end

     def Factory::new(arg, *a, &b)
       klass =
         case arg
           when /a/
             TypeA
           when /b/
             TypeB
           when /b/
             TypeC
         end
       klass::new(*a, &b)
     end
   end

although the returned type might depend on file extension or something else.
since 'new' is just a method on a class object it's always free to return
anything it likes.  the nice thing about this is that, in ruby, __every__ call
to new is, by definition, the factory pattern - it just so happens that there
is a default implementation inherited by class 'Class'.  simplicity.

cheers.

-a
-- 
===============================================================================
| email :: ara [dot] t [dot] howard [at] noaa [dot] gov
| phone :: 303.497.6469
| My religion is very simple.  My religion is kindness.
| --Tenzin Gyatso
===============================================================================