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
    end
end

HTML_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> '
end

Report.new(&HTML_REPORTER).output_report

 

 

上面的例子使用Proc对象实现了策略类,对于ruby来说,这是一件很优雅的情,放佛理应如此一般。不过这并不是说明使用Proc比使用策略类更加优越。Proc只适用于简单算法实现。如果策略类的逻辑复杂度很好的话,用class来实现无疑是不二选择。
哪些代码使用了策略模式?

最常见的策略模式实现恐怕非rdoc莫属了。rdoc是将ruby,c,FORTRAN代码中的注释转换成文档的工具。我们平时看到的ruby核心库的帮助文档都是通过rodc自动生成的。rdoc使用策略模式实现C parser, ruby parser和FORTRAN parser,这些parser用来分析和处理源代码中的注释,每一种语言都有其特定的parser实现。

另外rodc的输出也采用了策略模式。CHM Generrator, XML Generrator, HTML Generrator等都是策略类的具体实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值