依赖的定义是有两个类@H_404_2@X,Y@H_404_2@,如果修改@H_404_2@X@H_404_2@的定义可能会引起对另一个元素@H_404_2@Y@H_404_2@的定义的修改,那么@H_404_2@Y@H_404_2@依赖于@H_404_2@B@H_404_2@。具体的表现形式为@H_404_2@1@H_404_2@)一个类中调用了它一个类的方法。@H_404_2@2@H_404_2@)一个类是另一个类的数据成员。@H_404_2@3@H_404_2@)一个类是另一个类的方法参数。@H_404_2@
关联的定义是@H_404_2@: @H_404_2@ 关联表示两类之间存在某种语义上的联系。看大话设计模式,如果类@H_404_2@a@H_404_2@在类@H_404_2@b@H_404_2@中声明,那么就是关联。@H_404_2@
聚合的定义是@H_404_2@:@H_404_2@如果@H_404_2@a@H_404_2@包含@H_404_2@b,@H_404_2@但@H_404_2@b@H_404_2@不是@H_404_2@a@H_404_2@的一部分。@H_404_2@
组合的定义是@H_404_2@:@H_404_2@如果@H_404_2@a@H_404_2@包含@H_404_2@b,@H_404_2@且@H_404_2@b@H_404_2@是@H_404_2@a@H_404_2@的一部分。@H_404_2@
@H_404_2@
Class a{@H_404_2@
public b b1;
}
请问@H_404_2@a@H_404_2@和@H_404_2@b@H_404_2@的关系。@H_404_2@
如果按照大话设计模式,这叫关联。可见,在@H_404_2@a@H_404_2@中只是声明了@H_404_2@b@H_404_2@类型的变量,什么时候使,怎么使,根本没有具体的说明,因此,普通关联应该是关系最弱的关系了。@H_404_2@
下面再看聚合@H_404_2@
Class a{@H_404_2@
Public b b1@H_404_2@
Public set(b b2){@H_404_2@
B1=b2@H_404_2@
}@H_404_2@
Public give(){@H_404_2@
B1.give()@H_404_2@
}@H_404_2@
}@H_404_2@
大话设计模式中是这样实现的聚合。让我们来分析下这样的代码是怎么样实现聚合的特性的。在类中声明,在方法中赋值,并调用体现了@H_404_2@a@H_404_2@包含@H_404_2@b.@H_404_2@但是只有@H_404_2@a@H_404_2@调用了@H_404_2@set@H_404_2@方法才产生了具体的@H_404_2@b,@H_404_2@两者间的生命周期并不同步。(但是@H_404_2@a@H_404_2@消失了,具体的@H_404_2@b@H_404_2@也会消失,这点怎么体现聚合关系的?不懂,求帮助。)@H_404_2@
@H_404_2@
Class Bird
{
Private Wing wing;
Public Bird()
{
Wing=new Wing();
}
}
大话设计模式这样实现组合。因为在构造方法中强制实现wing对象的实例化,因此,wing与bird的声明周期完全相同,可谓同生共死。是一种非常霸道的占有关系。就宛如人和头一般。