1700468672
1700468673
if(c instanceof Leaf){//叶子节点
1700468674
1700468675
c.doSomething();
1700468676
1700468677
}else{//树枝节点
1700468678
1700468679
display(c);
1700468680
1700468681
}
1700468682
1700468683
}
1700468684
1700468685
}
1700468686
1700468687
}
1700468688
1700468689
仅仅在遍历时不再进行牵制的类型转化了,其他的组装则没有任何变化。透明模式的好处就是它基本遵循了依赖倒转原则,方便系统进行扩展。
1700468690
1700468691
1700468692
1700468693
1700468694
设计模式之禅 21.4.3 组合模式的遍历
1700468695
1700468696
我们在上面也还提到了一个问题,就是树的遍历问题,从上到下遍历没有问题,但是我要是从下往上遍历呢?比如组织机构这颗树,我从中抽取一个用户,要找到它的上级有哪些,下级有哪些,怎么处理?想想,再想想!想出来了吧,我们对下答案,类图如图21-9所示。
1700468697
1700468698
1700468699
1700468700
1700468701
图21-9 增加父查询的类图
1700468702
1700468703
看类图中,在Corp类中增加了两个方法,setParent是设置父节点是谁,getParent是查找父节点是谁,我们来看一下程序的改变,如代码清单21-25所示。
1700468704
1700468705
代码清单21-25 抽象构件
1700468706
1700468707
public abstract class Corp{
1700468708
1700468709
//公司每个人都有名称
1700468710
1700468711
private String name=””;
1700468712
1700468713
//公司每个人都职位
1700468714
1700468715
private String position=””;
1700468716
1700468717
//公司每个人都有薪水
1700468718
1700468719
private int salary=0;
1700468720
1700468721
//父节点是谁
[
上一页 ]
[ :1.700468672e+09 ]
[
下一页 ]