开放-封闭原则:软件实体(类,模块,函数等等)应该可以扩展,但是不可修改
为适应不断变更的新需求,就及早的想办法应对发生更大改变的可能。最初编写代码时,假设变化不会发生。当变化发生时,我们就创建抽象来隔离以后发生的同类变化。比如:之前的加法程序,很快在一个client类中就能完成(http://www.cnblogs.com/zhangdongsheng/archive/2012/03/25/2417224.html)。此时变化还没有发生,如果我们再加一个减法功能,你发现,增加功能需要修改这个类。这就违背了今天的“开放-封闭”原则,于是你就考虑重构程序。增加一个抽象运算类,通过一些面向对象的手段,如继承,多态等来隔离算法。面对需求对程序是通过增加新代码进行的,而不是改变现有代码。这就是开放-封闭的精神所在。