组合模式,网上的各种专业术语搞得人,审美疲劳,其实通俗易懂的理解就是,让使用者对单独对象还是对组合对象使用都是一致的,组合模式是以树形结构的表示,组合模式和装饰模式有相似点,只是他们的应用场景是不一样的,以下代码举例演示:
package com.oop.demo1;
/**
* 抽象出家族抽象类
* @author Liudeli
*
*/
public abstract class Family {
protected String name;
public Family(String name) {
this.name = name;
}
public abstract void add(Family component);
public abstract void remove(Family component);
public abstract void display(int depth);
}
package com.oop.demo1;
/**
* 在组合中,属于叶节点,叶节点没有子节点
* @author Liudeli
*
*/
public class Leaf extends Family{
public Leaf(String name) {
super(name);
}
public void add(Family component) {
// 注意:叶节点是没有子节点的
}
public void remove(Family component) {
// 注意:叶节点是没有子节点的
}
public void display(int depth) {
String level = "";
for(int i=0;i<depth;i++) {
level += "-";
}
System.out.println(level + name);
}
}
package com.oop.demo1;
import java.util.ArrayList;
import java.util.List;
/**
* 定义有节点的行为,用于存储子部件
* @author Liudeli
*
*/
public class Composite extends Family{
private List<Family> list = new ArrayList<Family>();
public Composite(String name) {
super(name);
}
public void add(Family component) {
list.add(component);
}
public void remove(Family component) {
list.add(component);
}
public void display(int depth) {
for (Family component : list) {
component.display(depth + 2);
}
}
}
/**
* 测试程序
* @author Liudeli
*
*/
public class Main {
public static void main(String[] args) {
// root
Composite root = new Composite("root");
root.add(new Leaf("伯伯"));
root.add(new Leaf("叔叔"));
Composite comp1 = new Composite("Comp X");
comp1.add(new Leaf("大儿子"));
comp1.add(new Leaf("二儿子"));
root.add(comp1);
Composite comp2 = new Composite("Comp Y");
comp2.add(new Leaf("三儿子"));
comp2.add(new Leaf("小儿子"));
root.add(comp2);
root.add(new Leaf("父亲"));
root.display(1);
}
}
运行结果:
谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,
刘德利CSDN博客, http://blog.csdn.net/u011967006