在组合设计模式中,我们以以下UML所示的方式处理层次结构。
但是,当您查看上图中的Leaf类时,您会发现它具有addComponent、removeComponent和getChild的空实现,因为这些方法不适用于叶节点。我真正想知道的是,是否有任何方法可以避免实现空/无操作的方法?
更新:好的,我删除了Liskov原则部分,因为现在对我来说已经很清楚了。但仍然不清楚为什么Leaf节点需要强制实现这三个方法,是否有一种方法可以不这样做?我认为还有另一个原则,即子类不应被迫实现不必要的方法。我的主要关注点是叶节点的三个方法的实现,您可以在任何父子结构中考虑这种情况,不一定是组合模式。
更新:好的,我删除了Liskov原则部分,因为现在对我来说已经很清楚了。但仍然不清楚为什么Leaf节点需要强制实现这三个方法,是否有一种方法可以不这样做?我认为还有另一个原则,即子类不应被迫实现不必要的方法。我的主要关注点是叶节点的三个方法的实现,您可以在任何父子结构中考虑这种情况,不一定是组合模式。
Composite
对象上调用doOperation
,它将只是迭代所有子元素并调用doOperation()
。它不需要知道子元素是否是复合的。 - René Link