组合与聚合是类间的最常见的依赖关系。有时,可以只用组合或聚合来代替继承,弱化依赖关系,也可以通过组合或聚合模拟出多继承的效果(java不支持多继承)。
组合与聚合的其区别是:组合的对象在母体消亡时随同一起消亡,而聚合则不然。
举例: 战士和他的心脏是组合关系
战士和他的步枪是聚合关系
通过继承ArrayList来解决:
package NO3;
import java.util.ArrayList;
class MyX extends ArrayList{
public boolean add(Object x){//通过覆盖ArrayList的add方法,来加入我们自己的逻辑
//这种使用方式应当尽量避免
//写具体的逻辑 相同长度的字符串只能加入两次
return true;
}
}
public class Test13 {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyX aMyX =new MyX();
aMyX.add("123");
aMyX.add("abcd");
aMyX.add("234");
aMyX.add("456");
}
}
通过组合模式来解决:
package NO3;
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
}
}
通过聚合模式来解决:
package NO3;
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");
}
}