文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
1.5 复合模式
在 复合模式(Composite Pattern) 下,一组对象与单个对象的多个实例在处理方式上是相同的。该模式常用于对象层级。通常,对于层级中的叶(leaf)或复合(composite)节点,一个或多个方法的调用方式应该是相同的。在这种情况下,复合节点通常会调用它每一个子节点的同一命名方法。
1.5.1 范例
下面探讨一下复合模式的一个范例,在 Leaf
或 Composite
对象上调用 toString()
。
在 Java 中, Component
类是非常重要的,因为它提供了叶节点与复合节点所用的类型。在 Groovy 中,由于 duck-typing,所以不再需要用它来完成这种用途,但该类依然非常有用,可以在叶节点与复合节点间放置常见的行为。
根据目标,我们将构建以下的层级:
代码如下:
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)
结果输出如下:
root
-leaf A
-comp B
--leaf B1
--leaf B2
-leaf C
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论