1.开闭原则
很多教程都把开闭原则作为这六大原则中最基本的原则,也就是说他是各个原则的核心。开闭原则指的是,一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
对于开闭原则,我们在设计软件的时候,首先要搞清楚程序当中什么是未来可能变化的,什么是未来不会变化的。对于可能变化的东西,我们要提前给与可以对应的扩展接口。当然实际开发中,即便是我们认为这些不会变化的地方,未来还是可能变化的,这种变化就只能改代码了,但是这种修改仅仅只是改变个别细节,整体架构往往不会变化。而对于可能变化的地方,我们要给出可以足够扩展的空间,让其能够自由扩展,基本发生了重大的需求变更,整体架构也不会受影响。
例如:工厂模式中,我们将创建对象的过程封装了起来,这样创建对象对的过程中,创建的代码就和调用的代码尽可能地解除了耦合。创建过程可能是变化的,而调用过程往往是不变的。我们创建一个对象之后,需要为其初始化,设定一些配置,这个过程需要我们给出可以扩展的余地,而且要求扩展的时候不能影响调用部分,所以需要使用工厂模式,将可变的创建过程封装起来,供不变的调用模块。
这样说来,开闭原则的核心是解耦了?没错,我认为开闭原则讲的就是解耦,但是他要求我们在设计的时候,重点要预判出什么地方是会发生变化的,并要为变化的地方留出余地。他强调的是对于可变部分进行解耦,使用扩展的方式而不是修改的方式应对变化,这样可以保证程序整体不会发生大的变化。
开闭原则对于开发框架、可以被复用的组件(如jar、dll、js插件等待)尤为重要,