您的位置:首页 > 编程语言 > Java开发

组合模式(Composite)——Java

2016-05-27 11:53 399 查看
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();// 遍历所有节点
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: