开放-封闭原则(Open Closed Principle)
🚏 导论 开放-封闭原则,是说软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。 对于拓展是开放的(Open for extension),对于更改是封闭的(Closed for modiication) 我们在做任何系统的时候都不要指望系统一开始时需求确定,就再也不会变化,这是不现实也不科学的想法,而既然需求是一定会变化的,那么如何在面对需求的变化时,设计的软件可以相对容易修改,不至于说,新需求一来,就要把整个程序推到重来。怎样的设计才能让软件在需求变化时,可以相对容易的修改呢?这就是开放-封闭原则要解决的问题。 具体来说,在设计的时候,时刻要考虑,尽量让这个类足够好,写好了就不要去修改了,如果新需求来了,增加一些类,原来的代码能不动则不动。当然,绝对的对修改封闭是不可能的。无论模块是多么的“封闭”,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。若猜测失败,要及时的去调整。面对新需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。 开放-封闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象,然而,对于应用程序中的每个部分都刻意地进行抽象同样不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要。 🎬 场景 场景一:🏢 公司管理 现要作为老板,给公司制定考勤制度,规定九点上班,不允许迟到。但是有公司骨干,老是迟到。他们也有实际的难处,比如有些人家离公司太远,有些人每天上午要送小孩子上学。需要对他们特殊处理,但不能违反公司的规定。其实迟到不是问题,最主要的是保证8小时的工作量或是完成业绩目标。于是应该改变管理方式,如弹性上班工作制,早到早下班,晚到晚下班,或者每人每月允许三次迟到,迟到者当天下班补时间等等。对市场销售人员可能就更加以业绩为标准,工作时间不固定了。这其实就是对工作时间或业绩成效的修改关闭,而对时间制度拓展的开放。