为什么方法仅与Component
接口的Composite部分有关?如果方法(Add
,Remove
,Getchild
是Composite
的一部分而不是常规接口的一部分,则Composites和Leafs仍将实现Component
接口因此可以互换使用,这是“合成”图案的目的之一。通过让Leaf
和Composite
都实现Component
(现在只需要Operation
),客户端仍然会像对待它们一样
Component anobject = new Leaf();
Component another = new Composite();
another.Operation();
anobject.Operation();
答案 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);