元设计模式

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方法,这个是代理。

results matching ""

    No results matching ""