合成聚合原则
Posted wangke0825
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合成聚合原则相关的知识,希望对你有一定的参考价值。
一、什么是合成聚合原则
合成/聚合复用原则是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。
简述为:要尽量使用合成/聚合,尽量不要使用继承。
二、什么是合成?
合成(组合):表示一个整体与部分的关系,指一个依托整体而存在的关系(整体与部分不可以分开)。
虽然组合表示的是一个整体与部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在,部分对象与整体对象之间具有同生共死的关系。
比如,头和嘴就是一种合成关系,在组合关系中,成员类是整体类的一部分,而且整体类可以控制成员类的生命周期,即成员类的存在依赖于整体类。
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
以上是关于合成聚合原则的主要内容,如果未能解决你的问题,请参考以下文章