Design Patterns Ruby

class Animal
  def initialize(name)
    @name = name
  end
  def eat
    puts("#{@name} is eating.")
  end
  def speak
    puts("#{@name} says !")
  end
  def sleep
    puts("#{@name} sleeps; ")
  end
end
class Zoo
  def initialize(number_animals)
    @animals = []
    number_animals.times do |i|
      animal = new_animal("Animal#{i}")
      @animals << animal
    end
  end
  def action
    @animals.each {|animal| animal.speak}
    @animals.each {|animal| animal.eat}
    @animals.each {|animal| animal.sleep}
  end
end
class AnimalZoo < Zoo
  def new_animal(name)
    Animal.new(name)
  end
end
pond = AnimalZoo.new(3)
pond.action