Composite Pattern
http://groovy-lang.org/design-patterns.html#_chain_of_responsibility_pattern
组合模式,允许你将多个对象作为一组对象对待。这些对象具有层次结构,并具有相同的 方法, 有叶子节点和组合节点。
组合节点,调用子节点(叶子和组合节点)的方法,实现组合节点自身的方法。
The Composite Pattern allows you to treat single instances of an object the same way as a group of objects. The pattern is often used with hierarchies of objects. Typically, one or more methods should be callable in the same way for either leaf or composite nodes within the hierarchy. In such a case, composite nodes typically invoke the same named method for each of their children nodes.
例子
Consider this usage of the composite pattern where we want to call toString()
on either Leaf
or Composite
objects.
abstract class Component { def name def toString(indent) { ("-" * indent) + name } } class Composite extends Component { private children = [] def toString(indent) { def s = super.toString(indent) children.each { child -> s += "\n" + child.toString(indent + 1) } s } def leftShift(component) { children << component } } class Leaf extends Component { } def root = new Composite(name: "root") root << new Leaf(name: "leaf A") def comp = new Composite(name: "comp B") root << comp root << new Leaf(name: "leaf C") comp << new Leaf(name: "leaf B1") comp << new Leaf(name: "leaf B2") println root.toString(0)