码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式中聚合和组合--代码中的实现

时间:2014-10-30 22:40:43      阅读:365      评论:0      收藏:0      [点我收藏+]

标签:设计模式   聚合和组合   设计模式代码实现   

●引言:


最近一直在看设计模式,以前写过一篇文章:设计模式中的关系在代码中的实现


之后他们问我说:聚合和组合在代码上怎样表现出生命期的不同。因为当时是真心不懂,不敢回答,现在有一点点心得,和大家分享一下。


●定义:


聚合:表示两个对象之间是整体和部分的弱关系,部分的生命周期可以超越整体。如电脑和鼠标。


?大话上的聚合:


bubuko.com,布布扣


?大话上的组合:


表示两个对象之间是整体和部分的关系,部分的生命周期不能超越整体,或者说不能脱离整体而存在。组合关系的“部分”,是不能在整体之间进行共享的。


bubuko.com,布布扣


●异同点


共同点:他们都是属于关联,整体与部分的关系。

不同点:生命周期不同,聚合是独立的,不随整体共存亡的(生命周期不同步)。组合正好相反,与整体共存亡(生命周期同步)。


●代码中的实现


?聚合


在代码中的中的实现是比较灵活的,大雁聚合为雁群,只要大雁类是雁群的成员变量就行了。


代码有两种方式都是聚合:

第一种方式:这种方式一般用在大雁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();             
	}
}

总结


我们学习东西的时候,很想一下子就都要全懂了,其实学习是一个不断思考、不断研究的东西。我们要做的是:知道它、研究它、会用它、交流它。






设计模式中聚合和组合--代码中的实现

标签:设计模式   聚合和组合   设计模式代码实现   

原文地址:http://blog.csdn.net/qiumuxia0921/article/details/40626817

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!