美文网首页基于iOS的设计模式
对象之间的几种关系

对象之间的几种关系

作者: helinyu | 来源:发表于2021-09-06 10:58 被阅读0次

关联:老是和学生, 丈夫 和妻子
聚合: 整体不部分关系。 如学校和老师,车子和轮胎。
组合 : 人和脑子, 不可分割。 组合关系是整体和部分之间的关系,也是关联关系的一种

实现:类实现结构
泛华: 子类继承父类

1、 聚合: 表示一种弱的“拥有”关系, 表现的是A对象可以包含B对象,但B对象不是A对象的一部分。 eg: 大雁与雁群

2、合成(组成):表示一种强的“拥有”关系,体现严格的部分和整体关系,部分和整体的生命周期一样。 eg: 人和器官 、 鸟和翅膀

合成、聚合复用原则

尽量使用合成/聚合,尽量不要使用类继承。

聚合:Aggregation

聚合表示一种弱的“拥有”关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;
eg:大雁是群居动物, 所以每只大雁都是属于一个雁群,一个雁群可以有多少支大雁,所以大雁和雁群是聚合关系。

合成: composition

合成则是一种强的“拥有”关系,体现了严格的部分和整体关系,部分和整体的声明周期一样。
eg: 大雁 有两个翅膀, 翅膀与大雁是部分和整体的关系,并且它们的生命周期是相同的,于是大雁和翅膀就是合成关系。

聚合/合成 替代 继承的好处: 优先使用对象的合成/聚合将有助于你保持每个类被封装,并被击中在单个任务上。 这样的类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。

我们子类化的时候,会出现增加一个功能,或者增加一个新的抽象类的时候,会出现大量的子类。 这样造成了生成很多子类的问题。 —— 继承

继承有可能带来很多麻烦:
对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。 子类的实现与它的父类有非常紧密的依赖关系。 以至于父类实现中的任何变化必然会导致子类发生变化。 当你需要复用子类时,如果继承下来的实现不适用于解决新的问题,则父类必须重写或被其他更适合的类替换。 这种依赖关系限制了灵活性并最终限制了复用性。


使用下面的方式替代上面的继承。


PS: 什么时候使用继承?

一定要在是“is-a” 的关系时候再考虑使用,而不是任何时候都去使用。

相关文章

网友评论

    本文标题:对象之间的几种关系

    本文链接:https://www.haomeiwen.com/subject/fteewltx.html