Ruby 中的策略模式:从类到代码块的转变
1. 策略模式与上下文耦合问题
在策略模式中,将上下文传递给策略的技术虽然简化了数据流动,但也增加了上下文和策略之间的耦合度。这会放大上下文类和策略类相互纠缠的风险。例如以下代码:
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
这里的 HTMLFormatter 类接收 context 对象,虽然能获取所需数据,但也与上下文紧密相连。
2. 鸭子类型与策略模式
2.1 传统策略模式实现
之前构建的格式化示例遵循了 GoF 对策略模式的实现方式,有一个“抽象”的 Formatter 基类,以及
超级会员免费看
订阅专栏 解锁全文
13

被折叠的 条评论
为什么被折叠?



