是所有面向对象原则的核心

开放扩展
封闭变化

  1. 面对需求,对程序的改动是在增加代码的前提下进行的
  2. 实际情况下,比如一个被公共调用的类,需要根据需求更改和扩充,不应该直接更改这个类。
    而应当考虑实际情况,抽象出模型,然后继承并模型并实现。

核心思想:对抽象编程,而非对具体编程
使用抽象类去扩展方法

举例

  1. 比如实现 简单的 加法运算
  2. 前期只是一个简单的加法计算,写一个简单的类实现加法
  3. 到后期如果需要实现四则运算,这里要做的是抽象出四则运算的抽象类,里面有需要实现的是求计算结果,然后加减乘除类去继承抽象类,这样即使后期需要扩充额外的运算类,只要在此基础上增加派生类即可

直接更改原始类的后果

  1. 类如果被公共调用,那么原始的业务已经稳定下来,如果更改此类,则需要更改所有调用它的类,这增加了维护成本
  2. 有些类不能被更改,比如在不知道有其他人调用的情况下,更改此类会对其他调用方造成影响

注意

  1. 如果能料想到存在的需求改动,可以考虑先抽象,越早抽象难度越低
  2. 时刻抽象不是好主意,不成熟的抽象可能造成不良后果