设计模式之六大原则(二)

里氏代换原则((Liskov Substitution Principle, LSP)
定义:
子类型必须能够替换掉它们的父类型。 里氏代换原则是实现开闭原则的重要方式之一
理解:感觉此原则的思想就是继承的思想,在软件中将一个父类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用父类对象。需要注意的是,子类中的所有方法需要在父类中声明,因为如果子类拓展出新的功能而父类没有声明则无法实现父类对象对该方法的使用。所以我们使用里氏代换原则时应把父类设计为抽象接口,让子类去继承。由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展,这样就实现了开闭原则。
例子:动物的吃喝跑叫等一些列行为被猫继承之后也可以被其他狗牛羊等继承,实现了拓展,且对子类动物并无修改。


迪米特法则(Law of  Demeter, LoD):
定义:
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可通过第三者转发这个调用。
理解:此原则可用封装的思想来考虑,强调类之间的送耦合。当我们在设计程序的时候,应尽量使类之间的耦合性减弱,方便复用,使对象和对象之间减少交互联系,不至于有牵一发而动全身的尴尬。
例子:在机房中各个窗体和按钮之间的功能调用。


合成聚合复用 (Composite Reuse Principle, CRP):
定义:
尽量使用合成/聚合,而不是使用类的继承来达到复用的目的
理解:在UML九种图中设计到了关联关系,其中包括组合关系和聚合关系,此原则的思想就是在一个新对象里
通过关联关系来使用已有的对象,使之成为新对象的一部分,新对象通过委派调用已有对象的方法来达到复用功能的目的。简言之就是复用事应尽量使用组合/聚合关系,少用继承。
例子:聚合:has-a  弱的拥有关系。A可包含B,但B不是A的一部分,有各自的生命周期。如雁群和雁,公司和员工
      组合:contains  强的拥有关系。部分和镇个体的生命周期是一样的。如鸟和翅膀。

你可能感兴趣的:(设计模式之六大原则(二))