一、组合,聚合的概念
1.组合概念
组合是关联关系的一种,是比聚合关系强的关系。是通过对现有的对象进行拼装(组合)产生新的、更复杂的功能,组合体现的是整体与部分、拥有的关系。简单点来说,组合就是 A类的对象是B类的成员变量,相当于 A类是B类对象的一个属性。
2.聚合概念
聚合也是关联关系的一种,是强的关联关系。聚合是整体和个体之间的关系。例如,汽车类与引擎类、轮胎类,以及其它的零件类之间的关系便整体和个体的关系。与关联关系一样,聚合关系也是通过实例变量实现的。但是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分。
二、组合和聚合的联系和区别
组合关系是一种强的整体和部分的关系,整体和部分具有相同的生命周期,同生共死。
聚合关系是一种弱的整体和部分的关系,整体和部分可以相互独立。
组合与聚合是类间的最常见的依赖关系。有时,可以只用组合或聚合来代替继承,弱化依赖关系,也可以通过组合或聚合模拟出多继承的效果(java不支持多继承)。
组合与聚合的其区别是:组合对象在母体消亡时随同一起消亡,而聚合则不然。
三、用Java实现组合、聚合算法
通过组合模式来解决:
import java.util.ArrayList;
//通过组合模式来过滤串
class Myx{
private ArrayList lst = new ArrayList();
//Myx对象消亡后,lst对象也随之消亡
public void add(String x){
//处理过滤逻辑
lst.add(x);
}
}
public class Test14 {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
通过聚合模式来解决:
import java.util.ArrayList;
import java.util.List;
class MX{
private List lst;//此处List是接口
public MX(List lst){ //List采用外部注入的方式, 从构造方法中传入
this.lst = lst;
}
public void add(String x){
//处理过滤逻辑
lst.add(x);
}
}
public class Test15 {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList a = new ArrayList();
MX mx = new MX(a);//mx对象消亡后,仍有一个指针指向lst
a.add("123");
}
}