元设计模式
1.把变和不变的事物分开
2.针对接口编程,而不是针对实现编程
3.组合优于继承
4.使用委托
1.把变和不变的事物分开
这个原则的实现模式是模板模式,在父类中实现不变的内容,变化的内容只是实现一个接口,子类中对变化的内容进行实现。
class Father
def abstract
raise "abstract"
end
def specific
p "specific"
end
end
class Child < Father
def abstract
p "abstract"
end
end
在上面的代码中,父类的specific是不变的部分,已经在父类中进行了实现,对于变化的部分abstract, 在子类中进行了实现。这是一个典型在java中的面向接口编程。
2.针对接口编程,而不是针对实现编程
ruby中的针对接口编程不是java中的针对接口编程,比如上面所示的方式。ruby中的面向接口编程是针对最通用的类型进行编程,比如如果能使用交通工具类型来处理汽车类型的话,就别对汽车使用汽车类型。
3.组合优于继承 4.使用委托
继承的优点是能够复用父类的功能,缺点是增加了代码的耦合,为了解决这个问题,引入组合的功能(能规避耦合,又能增加功能)
组合:为了我们的对象附上与其他对象(哪些包含我们所需功能的对象)的关联
委托:在实现一个对象的功能的过程中,通过这个对象中的其他对象来实现这个功能的方式叫委托
class Engine
def start
#发动引擎
end
def stop
#关闭引擎
end
end
class Car
def initialize
@engine = Engine.new
end
def drive_car
@engine.start
@engine.stop
end
end
在上述的代码中,car的对象关联上了engine的对象,这个是组合,同时在使用car的drive_car的方法的时候,其实调用的是engine的start和stop方法,这个是代理。