あるオブジェクトの集合で構成されたオブジェクトも同一のインターフェースをもつパターンです。
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