开闭原则
如果用一句话解释的话,我会说开闭原则的内容是,对扩展开放,对修改关闭。
什么意思?
有两层意思,第一层是设计时应该方便后续扩展,对原有代码修改屏蔽。第二层是新增功能时通过扩展来实现,而不是通过修改原有代码来实现。
为什么要遵守开闭原则呢?
这么做是为了能够以最小的代价完成一个功能。
这里的最小代价分为三个层面,一个是测试,一个是代码复用性,一个是代码维护性。
首先,对于测试来说,修改原有代码来增加新功能,就意味着可能会影响到原有的功能,那么对于原有的功能就需要进行测试,这样无形中增加了很多测试的工作量。如果是进行扩展来增加新功能,那么可以认为原有的功能是没有被影响或影响很小,这样一来测试的范围就会小很多,所以工作量就会减少很多。
当然,要注意这里的对修改关闭,并不是原有的代码一点都不修改,而是很小的改动。
其次,代码复用性,你修改原有代码,你这么做本身就说明了代码复用性不高,如果是代码复用性高的话,你就不敢动原有代码,因为这么做会造成牵一发动全身的结果,这样修改代码需要万分小心并且需要花费大量的时间分析,在完成代码修改之后,代码的复杂度还提高了,后续再需要修改将会比上一次更难分析。
最后,代码维护性,和修改原有代码相比,新增一个扩展方法相比会简单很多。
并且值得注意的是,开闭原则更像是一个最高目标。
为什么这么说呢?
因为这个目标基本上不可能每次都能够达到的,所以不必纠结于必须遵守开闭原则。
在说完是什么和为什么之后下面来说说如何使用开闭原则?
说到如何使用我认为在几个方面,一个是在设计方面,一个是在代码方面。
设计方面,在设计时提前思考未来可能的变化,当变化来临时可以通过扩展完成。
代码方面,新增功能尽量使用扩展的方式来实现。