博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式聚合和组合--代码执行
阅读量:6187 次
发布时间:2019-06-21

本文共 1228 字,大约阅读时间需要 4 分钟。

●简介:

最近,我一直在寻找设计模式,经写过一篇文章:

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

●定义:

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

▪大话上的聚合:

▪大话上的组合:

表示两个对象之间是总体和部分的关系,部分的生命周期不能超越总体,或者说不能脱离总体而存在。

组合关系的“部分”,是不能在总体之间进行共享的。

●异同点

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

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

●代码中的实现

▪聚合

在代码中的中的实现是比較灵活的,大雁聚合为雁群。仅仅要大雁类是雁群的成员变量即可了。

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

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

总结

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

版权声明:本文博主原创文章。博客,未经同意不得转载。

你可能感兴趣的文章
案例丨数据驱动的发现页最低成本改版
查看>>
普通用户竟这样执行xp_cmdshell存储过程!
查看>>
Visualize Famous Campus in China
查看>>
C#给PDF文档添加文本和图片页眉
查看>>
为Exchange Server 2010服务器申请证书
查看>>
httpd之Forbidden问题解决
查看>>
输入的字符串分割后 ,通过查询语句查询结果集
查看>>
三台linux服务器相互ssh 无密码验证登陆
查看>>
.htaccess文件的作用(访问控制)
查看>>
了解你所不知道的SMON功能(四):维护col_usage$字典基表
查看>>
saltstack的安装和初步试用体验
查看>>
wall命令
查看>>
演示针对LVM分区的管理
查看>>
老王学linux-centos6.7RHCS
查看>>
string与CString
查看>>
深入实践Spring Boot1.6 小结
查看>>
为什么会"well-known file is not secure" ?
查看>>
ThinkPHP隐藏index.php的方法汇总【IIS/Apache/Nginx】
查看>>
<转>进程与线程的一个简单解释
查看>>
typescript 学习教程 (1)
查看>>