ruby设计模式--策略模式
模板方式模式将变化与不变进行了分离,使得编写的代码更具有灵活性,但是缺点是采用面向对象继承的特性来完成模式的开发,在实际调用过程当中具有一定的耦合性,面对这种情况,可以采用策略模式来进一步的提升代码的灵活性。
策略模式所根据的设计原则依然是将不变与变化进行分离,与模板方式模式不同的是采用组合和聚合方式来代替集成,这样的话使得具体实现完全被隐藏,并且在程序运行的时候能够更加灵活的对策略进行更改,使得程序更加灵活。
?
class Car attr_accessor :name, :door_size, :concrate_car def initialize(name, door_size, &proc) @name = name @door_size = door_size @concrate_car = proc end def car_break break_before @concrate_car.call break_after end def break_before p "called super method(before)" end def break_after p "called super method(after)" end def do_break raise "called super do_break" end endferrari = lambda do p "using hand to toggle the selector"endlamborghini = lambda do p "wring the button"endcar = Car.new "name", 4, &lamborghinicar.car_breakcar = Car.new "name", 4, &ferraricar.car_break?
?
通过ruby闭包,形成proc对象,即把以前的类定义转变成proc定义,该proc对象便是strategy,从编程的角度来说,这样接大大的减少了编码量,使其模式变得更加简答易懂,同样也遵守开闭原则,同样使得程序具有灵活性,可配置性。
补充:模式具有3个特性,模式名称,模式应用场景(需要解决的实际问题),模式的具体实现。模式的作用:复用,封装变化。模式:为一个普通存在的实际问题提供统一的解决方案