Ruby设计模式之策略模式二————更ruby些的策略模式
从上一篇博文我们可以看出,策略模式的策略类实际上就是一组实现特定功能的代码集合。而ruby实际上已经原生提供了操作一组代码集合的对象,Proc类。于是我们可以用更加ruby些的方式来实现我们的Report类和策略模式。具体代码如下:
class Report attr_reader :title, :text attr_accessor :formatter def initialize &formatter @title = 'My report the ruby way' @text = ['This is a report', 'which was written', 'in the ruby way'] @formatter = formatter end def output_report @formatter.call self endendHTML_REPORTER = lambda do |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>'endReport.new(&HTML_REPORTER).output_report