组合模式

组合模式

将对象组合成树形结构来表示“整体/部分”层次结构;
能让客户以一致的方式处理个别对象和组合对象。

组合内所有对象必须实现相同的接口,导致一些对象具备没有意义的方法调用
——>让这些方法不做事,或者返回null/false,甚至抛出异常
组合模式
组合模式

透明性

违反单一责任原则,换取透明性(元素是组合还是叶节点对客户透明)

更安全版本的组合模式
对不同的对象用不同的接口,但是这需要客户检查每个对象的类型然后才进行方法调用。

平衡
根据需要平衡透明性和安全性。

迭代器相关

组合迭代器:一个外部迭代器,利用栈维护它在遍历中的位置
空迭代器:hasNext()永远返回false