合成聚合原则

一、什么是合成聚合原则

  合成/聚合复用原则是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。

  简述为:要尽量使用合成/聚合,尽量不要使用继承。

 

二、什么是合成?

  合成(组合):表示一个整体与部分的关系,指一个依托整体而存在的关系(整体与部分不可以分开)。

  虽然组合表示的是一个整体与部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在,部分对象与整体对象之间具有同生共死的关系。

   比如,头和嘴就是一种合成关系,在组合关系中,成员类是整体类的一部分,而且整体类可以控制成员类的生命周期,即成员类的存在依赖于整体类。

 1 public class Head  
 2 {  
 3     private Mouth mouth;  
 4     public Head() {  
 5         mouth = new Mouth();  
 6     }  
 7 }  
 8 public class Mouth  
 9 {  
10 }  

 

三、什么是聚合?

  聚合:聚合是比合成关系更弱的一种拥有关系,也表示整体与部分的关系(整体与部分可以分开)。

  在面向对象中的聚合:通常在定义一个整体类后,再去分析这个整体类的组成结构,从而找出一些成员类,该整体类和成员类之间就形成了聚合关系。在聚合关系中,成员类是整体类的一部分,即成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。

  比如汽车和汽车引擎:

  

 1 public class Car  
 2 {  
 3     private Engine engine;  
 4     public Car(Engine engine) {  
 5         this.engine = engine;  
 6     }  
 7     public void setEngine(Engine engine) {  
 8         this.engine = engine;  
 9     }  
10 }  
11 public class Engine  
12 {  
13 }

 

四、一些思考

1.为什么不推荐使用继承?

  继承是面向对象的四大特性之一,用来表示类之间的 is-a 关系,可以解决代码复用的问题。虽然继承有诸多作用,但如果继承层次过深、过复杂,也会影响到代码的可维护性。

2.组合相比继承有哪些优势?

  继承主要有三个作用:表示 is-a 关系,支持多态特性,代码复用。而这三个作用都可以通过组合、接口、委托三个技术手段来达成。除此之外,利用组合还能解决层次过深、过复杂的继承关系影响代码可维护性的问题

 

参考链接

[1] https://blog.csdn.net/liaoqianchuan00/article/details/8230459

[2] https://blog.csdn.net/u010832572/article/details/45007933

posted @ 2020-03-20 12:09  王柯  阅读(220)  评论(0编辑  收藏  举报