6.开闭原则(Open Close Principle)(OCP)
开闭原则的核心思想:软件应该面对扩展是开放的,而面对修改是关闭的
开闭原则是所有面向对象设计原则的核心,上面的五个原则都是为实现这一目标服务的。软件设计追求的目标就是高内聚,低耦合,可拓展性强。
因此开闭原则认为:软件应该是可扩展、而不可修改的。即软件应该对扩展开放,而对修改关闭。
对扩展开放
也就是说,当有新的需求变化时,可以对现有的代码进行扩展,添加新的实现类,来适应新的情况,因此开闭原则的核心就是**面向抽象编程**。因为只有面象抽象,才可以做到实现的分离,对程序进行扩展。
对修改关闭
类一旦设计完成,就说明它可以独立的完成自己的工作了,不可以再因为功能性的原因对类做出更改。
因此,如果有新的需求,我们只需要添加这个新需求的实现,通过抽象或接口注入新的实现来改变类的行为,而不应该更改已经存在的类。
再设计一个模块时,应该使这个模块再不被修改的前提下进行扩展,不能修改任何源代码。从而保证现有功能的稳定。
需求总是再变化的,只有让类依赖于抽象,才能做到对修改的关闭。通过面向对象的继承和多态机制,实现类继承抽象类,并通过重写其方法来改变他的行为,实现新的扩展。
对于违反开闭原则的类,必须进行重构。封装变化是实现这一原则的重要手段,对于经常变化的状态,将它封装成一个类。
开闭原则的优点:
1. 通过扩展已有的软件系统,可以提供新的行为,以满足软件的新需求,提高软件的灵活性
2. 已有的软件功能,不能进行修改,以保证软件的稳定性
开闭原则的核心就是面向抽象编程,里氏替换原则就是最好的实现,但是一定要避免滥用抽象,只对变化的部分进行抽象。