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

●引言:

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

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

●定义:

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

?大话上的聚合:

?大话上的组合:

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

●异同点

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

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

●代码中的实现

?聚合

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

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

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

●总结

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

时间: 2024-08-04 10:17:27

设计模式中聚合和组合--代码中的实现的相关文章

设计模式中的关系在代码中的实现

我们都学过UNL,其中类图中有6类关系:泛华(继承).实现.关联.组合.聚合.依赖.由于他们之间也存在各种联系,我就将他们分为了4大类:依赖.关联.继承.实现. 整理如图: 从这个图中,我们就可以看出我是如何划分的了:聚合和组合是关联的特殊形式,所以就这样划分了. 我们知道,这6个关系的耦合的耦合度:继承=实现<依赖<关联<聚合<组合. 那么下一步,我们就看看,他们在设计模式的代码中是怎样实现的. 1.依赖关系 依赖关系的定义很绕口,其实说白了就是:一个对象依赖于另一个对象的服务.

Java for循环中设置停顿 逻辑代码中同样适用

1\ for (Object object : jsonArray) { 2\ Thread.currentThread().sleep(1000); 3\ list.add(((JSONObject)object).get("Name")); 4\ } 此处的停顿 适用于逻辑代码和循环 1000的单位为毫秒 停顿后提示一个未处理的异常 此时需要异常处理  1\ //抛出异常 2\ throws InterruptedException 3\ //或者try catch操作 4\ tr

Android代码中更改TextView颜色

项目中,需要在代码中动态更改TextView的颜色,原先使用如下: text.setTextColor(R.color.black); 为生效,查阅资料后,正确写法如下: text.setTextColor(context.getResources().getColor(R.color.black)); 或: text.setTextColor(getResources().getColorStateList(R.color.black)); Android代码中更改TextView颜色

UML类关系:依赖,关联,聚合和组合

UML图示例:(可使用StartUML来画图,小巧^_^) http://www.blogjava.net/lukangping/archive/2010/08/01/327693.html 聚合:表示两个对象之间是整体和部分的弱关系,部分的生命周期可以超越整体.如电脑和鼠标,就可以用一下图形表示: 组合:表示两个对象之间是整体和部分的强关系,部分的生命周期不能超越整体,或者说不能脱离整体而存在.组合关系的“部分”,是不能在整体之间进行共享的.如人和眼睛的关系:不过,如果你要说,眼睛可以移植,是

UML中的6大关系(关联、依赖、聚合、组合、泛化、实现)

UML定义的关系主要有六种:依赖.类属.关联.实现.聚合和组合.这些类间关系的理解和使用是掌握和应用UML的关键,而也就是这几种关系,往往会让初学者迷惑.这里给出这六种主要UML关系的说明和类图描述,一看之下,清晰明了:以下就分别介绍这几种关系: 继承[dependency] 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系:在Java中此类关系通过关键字extends明确标识,在设计时一般没有

从Android代码中来记忆23种设计模式

我的简书同步发布:从Android代码中来记忆23种设计模式 相信大家都曾经下定决心把23种设计模式牢记于心,每次看完之后过一段时间又忘记了~,又得回去看,脑子里唯一依稀记得的是少数设计模式的大致的定义.其实,网上很多文章讲得都非常好,我也曾经去看过各种文章.也曾一直苦恼这些难以永久记下的设计模式,直到我接触到了<Android源码设计模式解析与实战>--何红辉与关爱明著,发现原来其实我们在Android中都接触过这些设计模式,只是我们不知道而已.既然我们都接触过,我们只需一一对号入座,对设计

设计模式之UML(一)类图以及类间关系(泛化 、实现、依赖、关联、聚合、组合)

类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据.接下来我们就来谈谈类图的组成,在下一篇中我们将讨论一下类图之间的关系. 一.类图的组成 1. 普通类 上图就是一个UML的普通类图,从上图我们看出,一个UML通常由三部分组成. 第一部分是类名:每个类都必须有一个名字,类名是一个字符串. 第二部分是类的属性(Attributes):属性是指类的性质,即类的成员变量.一个类可以有任意多个属性,也可以没有属

设计模式,Let&#39;s “Go”! (中)

* { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif; font-size: 15px } p { line-height: 25.6px; text-align: justify; margin: 23.7px 0 } blockquote { b

Android自定义控件系列 十:利用添加自定义布局来搞定触摸事件的分发,解决组合界面中特定控件响应特定方向的事件

这个例子是比较有用的,基本上可以说,写完这一次,以后很多情况下,直接拿过来addView一下,然后再addInterceptorView一下,就可以轻轻松松的达到组合界面中特定控件来响应特定方向的触摸事件了. 请尊重原创劳动成果,转载请注明出处:http://blog.csdn.net/cyp331203/article/details/45198549,非允许请勿用于商业或盈利用途,违者必究. 在写Android应用的过程之中,经常会遇到这样的情况:界面包含了多个控件,我们希望触摸在界面上的不