Strategy pattern with Ruby dynamic attributes : Strategy « Design Patterns « Ruby






Strategy pattern with Ruby dynamic attributes



class Document
  attr_reader :title, :text
  attr_accessor :formatter

  def initialize(formatter)
    @title = 'Your Document'
    @text =  ['Things are going', 'really, really well.']
    @formatter = formatter
  end

  def output_report()
    @formatter.output_report(self)
  end
end

class HTMLFormatter
  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

class PlainTextFormatter
  def output_report(context)
    puts("#{context.title}")
    context.text.each do |line|
      puts(line)
    end
  end
end

 








Related examples in the same category

1.Replacing the Algorithm with the Strategy
2.Sharing Data between the Context and the Strategy