Ok. This is a wild idea.
I don’t like the factory pattern.
We don’t need no stinkin Factories. We have the Class object.
All a Factory is really Class.
However, a traditional Factory object can have…
- State.
- Richer behaviour than the Class class.
Ok, this gets a little hairy so lets get concrete.
class Foo
end
fo = Foo.new
What is the class of fo? Foo
What is the class of Foo? Class
Now a FooFactory object is just an object with a bit more intelligence
and state that the traditional Foo class object for making Foo
instances in a better smarter way.
So the obvious thing to do is instead of making a new class FooFactory
< Object, it should inherit from Class.
Well, since Foo is already a Class, we really just want a smarter Class.
ie…
Instead of
class FooFactory
def initialize( foo_state)
@foo_state = foo_state
end
def foo_fu( bah)
# Knowledge of Foo making
end
def create( needs_fu, stuff)
Foo.new( foo_fu( needs_fu), @foo_state, stuff)
end
end
factory = FooFactory.new( ‘foo juice’)
foo = factory.create( ‘footile’)
We really want
class Foo < Class
def initialize( foo_state)
@foo_state = foo_state
end
def foo_fu( bah)
# Knowledge of Foo making
end
def new( needs_fu, stuff)
super( foo_fu( needs_fu), @foo_state, stuff)
end
end
foo = Foo.new( ‘fooless’, ‘stuffed’)
Except ruby doesn’t like that
class Foo < Class
bit.
It gets quite grumpy in fact.
Ruby says “can’t make subclass of Class (TypeError)”
Rats.
We can however say…
FooClass = Class.new(Class)
Unfortunately we can’t then say…
FooClass.new( Object)
Ruby says…
:in `new’: wrong instance allocation (TypeError)
Ahh! I’m just going around in circles fighting Ruby.
We need a way of saying…
class FooClass < Class
Add state and behaviour to Class
end
And then instead of saying…
class Foo < FooParent
# Add state and behaviour to FooParent
end
we need to be able to say…
FooClass Foo < FooParent
Add state and behaviour to FooParent
end
Aargh! I’m chasing my tail.
Is there anyway, (short of the traditional Factory Pattern) for me to
catch my tail?
John C. Phone : (64)(3) 358 6639
Tait Electronics Fax : (64)(3) 359 4632
PO Box 1645 Christchurch Email : [email protected]
New Zealand
Carter’s Clarification of Murphy’s Law.
“Things only ever go right so that they may go more spectacularly wrong
later.”
From this principle, all of life and physics may be deduced.