Mega Code Archive

 
Categories / Ruby / Design Patterns
 

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