组合模式
Clients treat collections of objects and individual objects uniformly.
允许你将对象组合成树形结构来表现“整体/部分”层次结构。
让客户以一致的方式处理个别对象以及对象的组合。
组合composite包括组件component,组件包括组合composite和叶节点leaf。
透明性transparency和安全性safety:
1)组合和叶节点具有相同的方法,其中包括add()方法。
→叶节点和组合之间是透明的,客户根本不用管究竟是组合还是叶节点,调用两者的同一方法。
2)但把组合维护孩子的方法和叶节点分开,只让flock具有add()方法,给duck添加无意义。
→安全性。不用调用无意义的方法,但透明性差,若用户想用add()方法,得确定对象是flock才行。
相对安全性,比较强调透明性,不需要的方法可以用空处理或异常报告方式解决。
客户希望代码是透明的,更注重容器内组合结构的时候,可牺牲透明,实现安全组合模式。