Creating Composites
class Job attr_reader :name def initialize(name) @name = name end def get_time_required 0.0 end end class SubJob1 < Job def initialize super('sub job 1') end def get_time_required 1.0 # 1 minute to add flour and sugar end end class SubJob2 < Job def initialize super('sub job 2') end def get_time_required 3.0 # Mix for 3 minutes end end class CompositeJob < Job def initialize(name) super(name) @sub_jobs = [] end def add_sub_job(job) @sub_jobs << job end def remove_sub_job(job) @sub_jobs.delete(job) end def get_time_required time=0.0 @sub_jobs.each {|job| time += job.get_time_required} time end end class MakeCakeJob < CompositeJob def initialize super('Make cake') add_sub_job( SubJob1.new ) add_sub_job( SubJob2.new ) end end
1. | Sprucing Up the Composite with Operators | ||
2. | Composite with Push and index Operators | ||
3. | An Array as a Composite | ||
4. | Array Iterator |