我从复合模式中得到的一个建议是提供默认操作来处理Leaf节点的不适当的子管理操作(即,在AddChild上抛出异常,为子节点返回空枚举等)。
我对经典模式的理解是有一个带有Leaf子类和Composite子类的抽象类,但是如果你在父类中提供默认操作,是否它不能有效地消除对Leaf的需要?
有人这样做吗?
干杯,
Berryl
答案 0 :(得分:2)
我们可能正在谈论不同的事情。我假设复合模式如http://en.wikipedia.org/wiki/Composite_pattern
所述对于该模式,您不会公开不适用于叶节点的操作,例如AddChild
(您的示例),因为Component
接口(使用维基百科文章中的名称)是旨在仅公开可以在叶子或节点上执行的常见操作。所以不需要默认值。
维基百科文章中add()
类上有一个Composite
,但这是为了向复合“视图”添加内容,而不是添加到任何特定的数据结构。换句话说,您可以通过复合接口访问数据树的某些部分,但接口上的add()
方法是从该集合中添加或删除项目,而不是从树本身中添加或删除。