Mega Code Archive

 
Categories / Ruby / Design Patterns
 

Sharing Data between the Context and the Strategy

class Document   attr_reader :title, :text   attr_accessor :formatter   def initialize(formatter)     @title = 'Document'     @text =  ['Things are going', ' well.']     @formatter = formatter   end   def output_report     @formatter.output_report(self)   end end class Formatter   def output_report(context)     raise 'Abstract method called'   end end class HTMLFormatter < Formatter   def output_report(context)     puts('<html>')     puts('  <head>')     puts("    <title>#{context.title}</title>")     puts('  </head>')     puts('  <body>')     context.text.each do |line|       puts("    <p>#{line}</p>")     end     puts('  </body>')     puts('</html>')   end end