为什么在Component接口中声明复合方法?

时间:2019-05-08 18:53:19

标签: c# design-patterns

在四本书的组合中,用图定义了Composite模式 enter image description here

为什么方法仅与Component接口的Composite部分有关?如果方法(AddRemoveGetchildComposite的一部分而不是常规接口的一部分,则Composites和Leafs仍将实现Component接口因此可以互换使用,这是“合成”图案的目的之一。通过让LeafComposite都实现Component(现在只需要Operation),客户端仍然会像对待它们一样

Component anobject = new Leaf();
Component another = new Composite();
another.Operation();
anobject.Operation();

1 个答案:

答案 0 :(得分:1)

因为您治疗复合材料和叶子相同。您可以编程以接口,而不是具体对象。

在您的示例中,您做不到:

Component l = new Leaf();
Component c = new Composite();

// now you can't do this because Composite doesn't know about add() method, only concrete subclass know in your variation.
composite.add(l);