开闭原则(Open Closed Principle,OCP),说的是软件实体对扩展开放,对修改关闭。即对于一个模块来说,他的行为是可以被扩展的,且不能修改其源代码,我们可以增加新的类来继承原有的类,以此来扩展他的功能。
开闭原则的核心在于‘抽象’。软件项目中,需求变更比较频繁,这要求我们的系统设计师再设计的时候要区分哪些是要变化的那些是不变的,不变的部分,我们可以直接写在方法中,变化的部分,就写在抽象方法中,以便其子类扩展。当然在实际中,很难真正的去达到这个要求,所以我们可以尽量达到开闭原则。
至于开闭原则的具体抽象实现方面,可以通过Java的抽象类或者接口去展现。对于软件系统的功能扩展,我们可以通过继承、重载等去实现。
以抽象类为例,对系统功能进行扩展时,只需根据抽象类实现新的子类;以接口为例,接口定义子类需要实现的接口函数,如果需求改变了,我们只需更换到另一个实现类。
优点:在一个团队开发过程中或者二次开发中,可以在不断增加新模块来满足不断变化的新需求,对于可维护性方面比较强,无需修改原有代码,使得软件具有一定的稳定性和延续性。
缺点:从上面就可以看出,不断地延伸出的子类,使得项目本身的类过多,从程序员本身开发方面,很难准确定位到该需求的具体实现方法,加大了程序员本身的压力;对于程序本身,加载过多的类运行速度变低。