什么是软件设计的开闭原则?如何实现开闭原则,有哪些方法?
软件实体(模块、类、函数等等)应该对扩展是开放的,对修改是关闭的。
通俗的说就是,软件功能可以扩展,但是软件实体不可以被修改。
在代码中看到 else 或者 switch/case 关键字的时候,基本可以判断违反开闭原则了。
设计模式中很多模式其实都是用来解决软件的扩展性问题的,也是符合开闭原则的。
策略模式
适配器模式
观察者模式
模板方法模式
实现开闭原则的关键是抽象。当一个模块依赖的是一个抽象接口的时候,就可以随意对这个抽象接口进行扩展,这个时候,不需要对现有代码进行任何修改,利用接口的多态性,通过增加一个新实现该接口的实现类,就能完成需求变更。不同场景进行扩展的方式是不同的,这时候就会产生不同的设计模式,大部分的设计模式都是用来解决扩展的灵活性问题的。
开闭原则可以说是软件设计原则的原则,是软件设计的核心原则,其他的设计原则更偏向技术性,具有技术性的指导意义,而开闭原则是方向性的,在软件设计的过程中,应该时刻以开闭原则指导、审视自己的设计:当需求变更的时候,现在的设计能否不修改代码就可以实现功能的扩展?如果不是,那么就应该进一步使用其他的设计原则和设计模式去重新设计。