zoukankan      html  css  js  c++  java
  • 设计模式六大原则之里氏替换原则

      OO中继承的包含一层这样的含义:父类中凡是已经实现好的方法,实际上是在设定规范的契约,虽然它不强制要求所有的父类遵循这些契约,但是如果子类对这些已经实现的方法任意修改,就会对整个继承体系造成破坏。

      继承在给程序设计带来便利的同时,也带来了弊端。比如使用继承会给程序带入侵入性,程序的可移植性降低,增加对象间的耦合性,如果一个类被其他的类所继承,则当这个类需要修改的时候,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能产生故障。

      继承优点:提高代码复用性、可扩展性

      继承缺点:侵入性(只要继承就必须拥有父类的所有方法和属性,一定程序约束子类);耦合性增强(父类修改时需要考虑所有子类,很可能造成子类功能出现故障)

    一、里氏替换原则

      在使用继承时,遵循里氏替换原则,在子类中尽量不要重写父类的方法。

      里氏替换原则告诉我们,继承实际上让两个类耦合性增强,在适当的情况下,可以通过聚合、组合、依赖来解决问题

    二、案例演示

      案例地址:https://github.com/Simple-Coder/design-pattern

    1、代码实现

     问题:发现原有正常的相减功能发生了错误,原因就是B类无意中重写了父类的方法,造成原有功能出现错误,在实际编程中,我们常常会通过重写父类的方法完成新的功能,这样写起来虽然简单,但整个继承体系的复用性会比较差

    通用做法:原来的父类和子类都继承一个更加通俗的基类,原有的继承关系去掉,采用依赖、聚合、组合等关系代替。

    2、UML类图比较

     原有B是继承A,现在将B类提升,使其成为Base的子类,如果B类还要用到A类,可以采用依赖、聚合、组合等关系,这样就满足了里氏替换原则

    三、总结

      里氏替换原则,一句话:在子类中尽量不要重写父类的方法

  • 相关阅读:
    web 单例 多例
    python socket客户端
    foy: 轻量级的基于 nodejs 的通用 build 工具
    Hydux: 一个 Elm-like 的 全功能的 Redux 替代品
    AlarmManager使用注意事项
    【转】android ListView 几个重要属性
    自己写的小工具软件集合
    win8.1 cygwin编译java轻量虚拟机avian
    android 图片缩放抗锯齿
    windows phone和android,ios的touch事件兼容
  • 原文地址:https://www.cnblogs.com/rmxd/p/12539570.html
Copyright © 2011-2022 走看看