Ruby/Design Patterns/Factory

Материал из Wiki.crossplatform.ru

Перейти к: навигация, поиск

Factory pattern

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



Use class method to create object

class Shape
  def initialize(num_sides, perimeter)
  end
  def Shape.triangle(side_length)
    Shape.new(3, side_length*3)
  end
  def Shape.square(side_length)
    Shape.new(4, side_length*4)
  end
end