设计模式六大原则-里氏代换原则

1、里氏代换原则(LSP)

      子类型必须能够替换掉它们的父类型。一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它觉察不出父类对象和子类对象的区别。也就是说在软件里面,把父类都替换成它的子类,程序的行为没有变化。这里也许会有疑问, 为什么子类可以替换父类的位置,而程序的功能不受影响呢?当满足继承的时候,父类肯定存在非私有成员,子类肯定是得到了父类的这些非私有成员(假设父类成员全部是私有的,那么子类就没办法从父类继承任何成员,也就不存在继承的概念了)。既然子类继承了父类的这些非私有成员,那么父类对象也就可以在子类对象中调用这些非私有成员。所以,子类对象可以替换父类对象的位置

      LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开闭原则”的补充,实现开闭原则的关键步骤是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

2、里氏代换的使用原则

(1)子类可以扩展父类的功能,但不能改变父类原有的功能。父类出现的敌方都可以用子类代替。(2)子类必须完全实现父类的抽象方法,但不能覆盖父类的非抽象方法(3)子类中可以增加自己特有的方法(4)当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法输入参数要更宽松(5)当子类方法实现父类抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格

3、里氏代换的优缺点

优点:(1)提高代码的重用性,子类拥有父类的方法和属性(2)提高代码的可扩展性,子类可形似于父类但异于父类

缺点:(1)继承是侵入式的,只要有继承就必须拥有父类的所有方法和属性,在一定程度上约束了子类,降低了代码的灵活性                   (2)增加了耦合性,父类有修改,会对子类造成影响。

猜你喜欢

转载自blog.csdn.net/u014086857/article/details/85648837
今日推荐