组合模式
将对象组合成树形结构来表示“整体/部分”层次结构;
能让客户以一致的方式处理个别对象和组合对象。
组合内所有对象必须实现相同的接口,导致一些对象具备没有意义的方法调用
——>让这些方法不做事,或者返回null/false,甚至抛出异常
透明性
违反单一责任原则,换取透明性(元素是组合还是叶节点对客户透明)
更安全版本的组合模式
对不同的对象用不同的接口,但是这需要客户检查每个对象的类型然后才进行方法调用。
平衡
根据需要平衡透明性和安全性。
迭代器相关
组合迭代器:一个外部迭代器,利用栈维护它在遍历中的位置
空迭代器:hasNext()永远返回false