开闭原则:
一个软件实体应当对扩展开放,对修改关闭。也就是说在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。(即不修改源代码)
软件实体:
可以是一个软件模块、一个由多个类组成的局部结构或一个独立的类。
原则的关键:
抽象化是开闭原则的关键。需要把可变性进行封装。即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。
比如说:
Area类用来计算矩形的面积
但是,如果矩形换成三角形、换成圆形呢,我们不可能换一个就对类进行修改。我们应该尽可能的扩展,对相同的可变因素进行提取、抽象,而避免对类进行修改。
比如针对这个问题,我们可以抽象一个形状Shape接口,里面有一个抽象化计算面积的方法,然后让其他形状的类去实现这个接口并重写这个计算面积的方法即可。