一.开放封闭原则介绍

开放封闭原则:软件实体(类,方法,模块)应该可以扩展,但是不可以修改。开放封闭原则简称为开闭原则。 英文全称是Open Close Principle,缩写是OCP

因此,开放封闭原则主要体现在两个方面:

对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。

对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。

二.生活中的开放封闭原则

笔记本电脑:我们购买到的任何品牌的笔记本,都是“开放封闭”的。 封闭:整个笔记本是封闭的,且笔记本背部标明了“非专业人士,请勿试图拆卸或者维修”以及“撕毁保修无效”的封条。 开放:指的是笔记本提供了若干个USB 的插口,可供我们扩展。 简单分析: 笔记本本身具备键盘,触摸板,音响等功能,但是这些往往没有独立的外设好。很多人会选择购买机械键盘,外置鼠标,外置音响,通过USB 插口对笔记本原有的功能进行扩展,这是一种正常的操作习惯,扩展而不是修改。很少有人会在笔记本身上直接进行改动的,比如:把所有的键盘帽翘开,DIY成机械键盘,拆开机器,更换一个更好的音响。如果你真这样做了,是有很大的风险的,风险是你有可能破坏笔记本原有的结构,甚至出现大量的潜在风险。

三.编程中的切入点

面对需求,对程序的改动应该是以增加新代码的方式解决,而不是更改旧的代码。这一点在游戏开发方向尤为重要。 因为游戏开发过程中,需求可能是随时随地都在发生改变,你可能刚写完一个功能模块,这个功能模块的需求就要发生改变。尤其是很多不靠谱的策划,等你改完了,他一看,发现还不如没有修改之前的好,一句话“你还原成之前的效果”。如果你在应对新的需求,新的改变的时候,是修改而不是扩展,那么你的工作量将是巨大的。 Git,SVN 版本控制不可靠,因为这些版本控制是你整个项目的进度,而不是针对性的某一个模块功能的进度。你Git 还原版本,可能其他模块也会一同还原。还有一点需要各位注意:开放封闭原则,其中的封闭不是绝对的封闭。

四.Unity 引擎开闭原则

其实Unity 引擎本身就是开闭原则很好的一个典范。 Unity 官方把这款引擎打包发布出来以后,这个引擎本身程序员是不可以修改的,因为你没有源码—>对修改关闭。但是Unity 引擎提供了一个很强悍的功能,“编辑器扩展功能”,提供了一组完整的API,我们可以通过这组API 对Unity 引擎扩展出N 个插件,以满足我们的特定需求。如果没有这个编辑器扩展功能,Unity 资源商店可能会减少50%的资源,只会是一些素材资源—>对扩展开发。 其实Unity 的成功,很大一部分原因来源于它的“开闭原则”。 对修改关闭,可以保证引擎的稳定性; 而对扩展开放,可以保证程序员开发者能弥补Unity 本身的不足。 比如:NGUI,Shader Forge,Playmaker ……