一个软件总是在随着需求的变化而跟着变化的,没有任何一个软件能够从设计出来就一直保持不变,那就肯定会涉及到增加新功能,如果我们在原基础代码上进行更改,那么必然会对原有功能造成一定的影响。开放闭合原则提出来就是为了解决该问题。也可以理解为,提出该原则是为了降低耦合度。
开放封闭原则(OCP,Open Closed Principle)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原则正是对这一目标的最直接体现。其他的设计原则,很多时候是为实现这一目标服务的,例如以Liskov替换原则实现最佳的、正确的继承层次,就能保证不会违反开放封闭原则。 关于开放封闭原则,其核心的思想是: 软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。 对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。 因此,开放封闭原则主要体现在两个方面: 对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。
开放闭合,即就是抽象出一个接口,该接口有将来开发的所有的功能都会有的一个方法,每一个功能必然会实现这个方法。那么每一个功能必然都会继承该接口。 看图,我们通过一个接口,确定了一些所有功能都必然会写的一个方法。下面的功能都继承该接口。如果我们需要增加新的功能那么我们就只需要在已有的功能后面再增加一个类继承于该接口,这样就不会对以前的代码进行任何的更改就可以进行新的功能的增加而不需要更改以前的代码,也不会影响到以前的功能。如果以前的功能有一些暂时的变化或者是有所增加都可以对相应的功能进行扩展或者是对某些功能进行重写就可以完成一个功能的更新或者是暂时的更改而不需要去更改上面的代码! 也不会对需要用到这个功能的任何一个部件造成任何的影响。