设计模式中聚合和组合--代码中的实现
来源:互联网 发布:画图软件在线使用 编辑:程序博客网 时间:2024/05/22 13:53
●引言:
最近一直在看设计模式,以前写过一篇文章:设计模式中的关系在代码中的实现
之后他们问我说:聚合和组合在代码上怎样表现出生命期的不同。因为当时是真心不懂,不敢回答,现在有一点点心得,和大家分享一下。
●定义:
聚合:表示两个对象之间是整体和部分的弱关系,部分的生命周期可以超越整体。如电脑和鼠标。
▪大话上的聚合:
▪大话上的组合:
表示两个对象之间是整体和部分的强关系,部分的生命周期不能超越整体,或者说不能脱离整体而存在。组合关系的“部分”,是不能在整体之间进行共享的。
●异同点
共同点:他们都是属于关联,整体与部分的关系。
不同点:生命周期不同,聚合是独立的,不随整体共存亡的(生命周期不同步)。组合正好相反,与整体共存亡(生命周期同步)。
●代码中的实现
▪聚合
在代码中的中的实现是比较灵活的,大雁聚合为雁群,只要大雁类是雁群的成员变量就行了。
代码有两种方式都是聚合:
第一种方式:这种方式一般用在大雁WideGoose是抽象类(父类)的时候,这时候,就可以传入不同的子类,这样就会使它调用的时候很灵活。
class WirdGooseAggregate{private WideGoose widegoose; //成员变量定义大雁public SetWideGoose (WideGoose w) //通过传参得到大雁的对象{this.widegoose = w; }}
第二种方式:这种方式就是写死了,是不能灵活的,但是这样写也有它的好处,就是定义了一个初始值。在状态模式中就用到了这种方式,其实是定义了一个初始对象。
class WirdGooseAggregate{private WideGoose widegoose; //成员变量定义大雁public SetWideGoose () //通过传参得到大雁的对象{widegoose = new WideBlackGoose(); //WideBlackGoose是WideGoose的子类 }}
▪组合关系
在代码中就没有这样灵活了,它是强耦合的,它生命周期是同生同死的关系。我们知道一个对象被实例的时候就是我们意义上的“生”,因此我们就把组合的对象放在被组合对象的构造函数中:
class Bird{private Wing wing; //成员变量定义翅膀public Bird () //构造函数中实例化翅膀对象{wing = new Wing(); }}
●总结
我们学习东西的时候,很想一下子就都要全懂了,其实学习是一个不断思考、不断研究的东西。我们要做的是:知道它、研究它、会用它、交流它。
4 0
- 设计模式中聚合和组合--代码中的实现
- 设计模式中组合(Compose)和聚合(Aggregate)的关系
- 设计模式六种关系:依赖、关联、聚合、组合、继承和实现
- 设计模式中“组合” “聚合” “相识” 在不同场合下的意义和关系
- 聚合和组合的关系(设计模式)
- 设计模式---->组合/聚合复用原则
- 面向对象设计中的继承、组合、聚合
- 组合设计模式代码
- 组合设计模式代码
- 聚合VS组合的代码实现过程
- PHP面向对象中的聚合和组合
- c++中的继承、聚合、关联和组合
- “组合” “聚合” “相识” 在不同场合下的意义和关系——《设计模式》读后感
- 23种设计模式-依赖、关联、聚合和组合之间区别的理解
- Java设计模式——依赖、关联、聚合和组合之间区别的理解
- rose 中表示聚合和组合
- UML中聚合和组合的区别
- 浅谈UML中聚合和组合
- 项目管理学习笔记之二.工作分解
- 内存数据库比较
- iOS进阶面试题----Block部分
- Opencv step by step - 基本数据类型
- CODEVS 3085 相同的后三位
- 设计模式中聚合和组合--代码中的实现
- iOS进阶面试题----多线程
- iOS进阶面试题----经典10道
- ZOJ - 3822 Domination(概率dp)
- iOS面试悲剧的应对的方法
- 背包九讲
- ubuntu下 apache2+php5+mysql
- C#动态图片
- 第三章《栈和队列》思维导图