rubyでデザインパターン compositeパターン

あるオブジェクトの集合で構成されたオブジェクトも同一のインターフェースをもつパターンです。

class Employee

  attr_reader :salary, :name

  def initialize(name, salary)
    @name = name
    @salary = salary
  end

end

class Developer < Employee

  attr_reader :role

  def initialize(name, salary, role)
    super(name, salary)
    @role = role
  end
end

class Designer < Employee

  attr_reader :role

  def initialize(name, salary, role)
    super(name, salary)
    @role = role
  end
end

class Organization
  def initialize
    @Employees = []
  end

  def addEmployee(employee)
    @Employees << employee 
  end

  def salary
    @NetSalary = 0
    @Employees.each do |employee|
      @NetSalary = @NetSalary + employee.salary
    end
    @NetSalary
  end
end

John = Developer.new('John', 20, 'developer')
Aya = Designer.new('Aya', 18, 'designer')
organizatin = Organization.new

organizatin.addEmployee(John)
organizatin.addEmployee(Aya)

puts John.salary
puts Aya.salary
puts organizatin.salary

#出力
#20
#18
#38