在我们学习面向对象编程的时候,总会出现一些问题,好比以前刚刚写好的代码,上线测试可以、正常运行,突然有一天说要加一个功能,改完之后,发现以前正常运行的功能不能用了,类似这样的问题有好多好多,为了避免类似的事件发生,程序员一定要根据这些原则去开发程序。
我们一个一个来学习,今天来学习7大面向对象设计原则之一,合成复用原则。
合成复用原则:
合成复用原则(Composite Reuse Principle,CRP)又叫组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)。它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。
如果要使用继承关系,则必须严格遵循里氏替换原则。合成复用原则同里氏替换原则相辅相成的,两者都是开闭原则的具体实现规范。
我们来理解一下这段话,首先,我们得知道里式替换原则,然后我们来看这个定义。
它这个原则是要我们先使用组合或者聚合实现,然后再使用继承。我这里举例说明
我们就用汽车这个来说啊,我们现在汽车有很多种,电动汽车,汽油汽车,还有柴油车(路上跑的那种拉货的好像就是柴油车)
车呢还有颜色区分,黄的白的绿的黑的。然后我们如果直接继承的话就变成这样了
从上图可以看出用继承关系实现会产生很多子类,而且如果我们再多一种新能源汽车,或者多上几个颜色,我们还得去修改代码,这样做的话,就违背了开闭原则,这显然不可取。我们如果把颜色当做一个属性放入到汽车这个父类中,让其他能源的汽车继承的时候,自己去定义,这样就好多了
合成复用原则的实现:
我其实上面在介绍的时候已经说了实现了。。
我这里画个图,来配合我上面说的
这样的话,如果多了一种黄色的汽油汽车,我们只需要直接继承汽油汽车,然后修改颜色就行。
我们不需要多弄一个黄色汽油汽车去继承汽车了。
这里要好好理解,千万别弄懵了。