class Car
def add_wheel(wheel)
add_object("wheel"){wheel}
end
def add_part(name, obj)
add_object(name){obj}
end
private
def add_object(name, &block)
self.class.send(:define_method, name, &block)
end
end
class Wheel
def initialize(size)
@size = size
end
def size
puts "Wheel size #{@size}"
end
end
class CarPaint
def initialize(colour)
@colour = colour
end
def is_metallic_color?
true
end
def colour
puts "Colour #{@colour}"
end
end
my_car = Car.new
my_car.add_wheel(Wheel.new(17))
my_car.wheel.size
my_car.add_part("colour", CarPaint.new("red"))
puts my_car.colour.is_metallic_color?
my_car.colour.colour
Tuesday, 30 October 2012
Adding object dinamically to a class.
Ruby's a great programming language everybody know. The breakthrough in Ruby is adding objects dynamically in a class, it's really amazing.
Why? It's possible to create a simple interface with high complexity.
For example, it's really viable create a car only adding parts in the object.
How did you do this? Using 'self.class.send(:define_method, name, &block)'.
This code will add a instance method (name) and code method (&block).
Actually, if you pass a object via &block, your new method will behave like a
object and your master class will be clean and it don't need implement nothing.
I'm not quite sure about design pattern name, although I like this.
Example:
Labels:
class,
design pattern,
reflection,
ruby
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment