开闭原则(Open Close Principle):
Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.
软件对象(类、模块、方法等)应该对于扩展是开放的,对修改是关闭的。
比方说有一辆汽车,它如果要加入一个车顶行李箱的话。我们用户一定不想对汽车进行过大的改装,于是一般的车顶行李箱会借助车顶上的两条杆,直接一扣就行了,没有杆的汽车也可以采取其他方式,也不会对汽车内部和汽车里面进行过大的破坏和改造,方便用户的安装和拆卸。
同样的,软件对于扩展应该使开放的,对于修改应该是封闭的。
保证可扩展性和系统内部的安全性!当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。
一般我们可以采用抽象(JAVA中可以使用接口),先搭建好框架,抽象的实现来扩展细节。
就好比List是一个接口,一般我们都是用ArrayList作为一个实现类来实现它。
List list = new ArrayList();
当后面的软件设计对于ArrayList不满意。需要更改成为其它的接口,我们就可以直接替换ArrayList。
如: List list = new Vector()
这样我们不会影响到已经用list这个对象调用了的方法。而是通过直接的修改实现类来改变它的方法和属性。
保证了系统的安全性!