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
1. | Replacing the Algorithm with the Strategy | ||
2. | Sharing Data between the Context and the Strategy |