
说白了就是:要针对接口编程,不要针对实现(过程)编程。
一个电脑主机,无论CPU、主板、内存、硬盘还是显卡都是针对接口设计的,如果针对实现来设计,每个模块就要具体到某个品牌的主板,更换极其麻烦。
再比如,有些有些业务的高层模块是依赖底层访问数据库的模块,是绑定在一起的。当客户希望使用不同的数据库或者存储信息方式的时候,就会比较麻烦。
那么为什么高层模块和底层模块一来了抽象接口或者抽象类,就不再怕更改了呢?
这里提出了里氏替换原则。
里氏替换原则(LSP)-子类型必须能够替换掉他们的父类型只有当子类可以替换掉父类,软件单位功能不受影响时,父类才能真正的被复用,而子类也能够在父类的基础上增加新的行为。
比如猫,是继承动物类的,可以吃、喝、跑、叫,如果有一天我们需要狗、牛、羊,他们也拥有这些行为,所以除了更改实例化的地方,程序其他出不需要改变。