Mega Code Archive

 
Categories / Ruby / Design Patterns
 

Composite with Push and index Operators

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      def <<(job)     @sub_jobs << job   end   def [](index)     @sub_jobs[index]   end   def []=(index, new_value)     @sub_jobs[index] = new_value   end    end composite = CompositeJob.new('example') composite << SubJob2.new puts(composite[0].get_time_required) composite[1] = SubJob1.new