组合模式是一种设计层次构架的模式。它提供了一种数据结构,像数组和链表一样,一层一层的。分了两个不同功能的类,他们实现了一个共同的接口。代表了一个东西,但是具体实现不一样。
文章和章节是不同的两种功能的设计。文章不能分支,是具体展示内容的。而章节是容器,能装同样的结构,所以设计的时候要包含一个容器类,来添加节点。
根节点compose:所有类的基类包括(叶子节点 和 其他树枝节点)
public interface Compose {
void add(Compose compose);
void display();
}
叶子结点leaf,没有容器类。具体的实现类。
class Leaf implements Compose{
String name;
Leaf(String name){
this.name = name;
}
@Override
public void add(Compose compose) {
// TODO Auto-generated method stub
}
@Override
public void display() {
System.out.println(name);
}
}
树枝节点composite:递归。包含一个容器类。
public class composite implements Compose {
String name;
composite(String name) {
this.name = name;
}
ArrayList<Compose> list = new ArrayList<Compose>();
@Override
public void add(Compose compose) {
list.add(compose);
}
@Override
public void display() {
System.out.println(name);
for (Compose compose : list) {
compose.display();
}
}
}
测试类:
class Test {
public static void main(String[] args) {
Compose leaf1 = new Leaf("小红帽");
Compose leaf2 = new Leaf("白雪公主");
Compose zhang = new composite("第一章");
Compose jie = new composite("第一节");
zhang.add(jie);
jie.add(leaf1);
jie.add(leaf2);
zhang.display();
}
}
结果:
第一章
第一节
小红帽
白雪公主
从结果可以看出:这个模式是表现的层次结构关系的设计。通过多态实现了代码的复用。