Component:节点的抽象类
public abstract class Component {
public abstract void Operation();
public abstract void Add(Component c);
public abstract void Remove(Component c);
public abstract Component GetChild(int i);
}Composite:组合体,如树一般,可包含叶子节点或子树
import java.util.ArrayList;
import java.util.List;
public class Composite extends Component {
// Composite由多个Component组成(聚合关系)
private List<Component> list = new ArrayList<Component>();
public void Operation() {
for (Component c : list) {
// 遍历所有子节点,并执行子节点的方法
c.Operation();
}
}
public void Add(Component c) {
list.add(c);
}
@Override
public void Remove(Component c) {
// TODO Auto-generated method stub
}
@Override
public Component GetChild(int i) {
// TODO Auto-generated method stub
return null;
}
}Leaf:叶子节点
public class Leaf extends Component {
public void Operation() {
System.out.println("this is leaf");
}
@Override
public void Add(Component c) {
// TODO Auto-generated method stub
}
@Override
public void Remove(Component c) {
// TODO Auto-generated method stub
}
@Override
public Component GetChild(int i) {
// TODO Auto-generated method stub
return null;
}
}Client:客户端,构造一个组合体,并遍历该组合体的所有叶子节点,如下图所示:
这个类很重要,这个类是否写正确,以及运行结果是否正确意味着对设计模式是否真正理解
public class Client {
public static void main(String[] args) {
Leaf leaf1 = new Leaf();// 叶子节点
Leaf leaf2 = new Leaf();
Leaf leaf3 = new Leaf();
Composite c = new Composite();// 子树节点,包含两个叶子节点
c.Add(leaf2);
c.Add(leaf3);
Composite composite = new Composite();// 树
composite.Add(c);
composite.Add(leaf1);
composite.Operation();// 遍历所有节点
}
}
本文介绍了一种常用的设计模式——组合模式,通过定义树形结构来表示“部分-整体”的层次结构,使得用户可以一致地使用单个对象和组合对象。文章通过具体的Java代码示例展示了如何创建组合体和叶子节点,并演示了客户端如何使用这些组件。
1819

被折叠的 条评论
为什么被折叠?



