开放?封闭?
什么是开放封闭原则?
这里的开放和封闭,并不是传统意义上的开放和封闭(例如闭关锁国,改革开放),而是指在设计类的时候,对这些类做出的一些要求
开放指的是可拓展,封闭指的是不修改
为什么这样做?
因为修改肯定是令众多人头疼的一个问题
我以前做数学题的时候,老师一直强调说:“你们要是考试的时候做完了,要重新做一次,检查一下前面有没有做错”,可是我每一次检查修改的时候,总是会出错,原本对的题目,最终都荣获老师的亲笔大红叉
写软件也是一样,谁希望去修改已经写好的一大堆东西呢?尤其是当工程量非常庞大,成千上万行那种
这样做的优势
这里面最核心的一个原则就是:对于原本已经写好的,不修改,如果需要增加新的内容,则多写一个类
看回原来在简单工厂模式那篇文章里面提到的那个计算器,那里面有一张图,描述了这样的原则,把计算类写成一个抽象类,在里面写 3 个纯虚函数,分别是获取 2 个进行运算的变量,一个获取结果的函数,那么只需要让不同的运算类去继承并且实现相应的纯虚函数即可
这样做的话,如果加减乘除四则运算已经写好了,则不需要去管他,如果需要增加新的运算类型,只需要添加新的运算类,继承这个抽象类并且实现相应的纯虚函数即可
那么,他们是不是就满足了开放封闭原则,增加新的运算功能属于可拓展,已经写好的运算类(在经过测试,没有问题之后)不需要修改,其他地方的什么改动也不会影响到他