关联:老是和学生, 丈夫 和妻子
聚合: 整体不部分关系。 如学校和老师,车子和轮胎。
组合 : 人和脑子, 不可分割。 组合关系是整体和部分之间的关系,也是关联关系的一种
实现:类实现结构
泛华: 子类继承父类
1、 聚合: 表示一种弱的“拥有”关系, 表现的是A对象可以包含B对象,但B对象不是A对象的一部分。 eg: 大雁与雁群
2、合成(组成):表示一种强的“拥有”关系,体现严格的部分和整体关系,部分和整体的生命周期一样。 eg: 人和器官 、 鸟和翅膀
合成、聚合复用原则
尽量使用合成/聚合,尽量不要使用类继承。
聚合:Aggregation
聚合表示一种弱的“拥有”关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;
eg:大雁是群居动物, 所以每只大雁都是属于一个雁群,一个雁群可以有多少支大雁,所以大雁和雁群是聚合关系。
合成: composition
合成则是一种强的“拥有”关系,体现了严格的部分和整体关系,部分和整体的声明周期一样。
eg: 大雁 有两个翅膀, 翅膀与大雁是部分和整体的关系,并且它们的生命周期是相同的,于是大雁和翅膀就是合成关系。
![](https://img.haomeiwen.com/i1205674/e4fbcbf33cea7605.png)
聚合/合成 替代 继承的好处: 优先使用对象的合成/聚合将有助于你保持每个类被封装,并被击中在单个任务上。 这样的类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。
我们子类化的时候,会出现增加一个功能,或者增加一个新的抽象类的时候,会出现大量的子类。 这样造成了生成很多子类的问题。 —— 继承
继承有可能带来很多麻烦:
对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。 子类的实现与它的父类有非常紧密的依赖关系。 以至于父类实现中的任何变化必然会导致子类发生变化。 当你需要复用子类时,如果继承下来的实现不适用于解决新的问题,则父类必须重写或被其他更适合的类替换。 这种依赖关系限制了灵活性并最终限制了复用性。
![](https://img.haomeiwen.com/i1205674/d035212b6906e53d.png)
使用下面的方式替代上面的继承。
![](https://img.haomeiwen.com/i1205674/9535f66a12437e36.png)
PS: 什么时候使用继承?
一定要在是“is-a” 的关系时候再考虑使用,而不是任何时候都去使用。
网友评论