简而言之,对于合成/聚合复用原则的定义就是:要尽量使用合成和聚合,尽量不要使用继承。
为什么“要尽量使用合成和聚合,尽量不要使用继承”呢?
这是因为:
第一,继承复用破坏包装,它把父类的实现细节直接暴露给了子类,这违背了信息隐藏的原则;
第二:如果父类发生了改变,那么子类也要发生相应的改变,这就直接导致了类与类之间的高耦合,不利于类的扩展、复用、维护等,也带来了系统僵硬和脆弱的设计。而用合成和聚合的时候新对象和已有对象的交互往往是通过接口或者抽象类进行的,就可以很好的避免上面的不足,而且这也可以让每一个新的类专注于实现自己的任务,符合单一职责原则。
两种判断方法:
“Is-A”代表一个类是另外一个类的一种,可以使用继承关系,如下图
而“Has-A”代表一个类是另外一个类的一个角色,而不是另外一个类的特殊种类。如下图
里氏代换原则是继承复用的基础。
关于里氏代换原则的介绍:http://blog.csdn.net/zlts000/article/details/26961047
设计模式六大原则——合成/聚合复用原则(CARP),布布扣,bubuko.com
原文地址:http://blog.csdn.net/u010853701/article/details/26749723