概念
- 用于树形结构;
- 这种类型的设计模式属于结构型模式;
- 组合模式使得用户对单个对象和组合对象的使用具有一致性。
demo
import java.util.ArrayList;
/**
* 1,Component抽象构件角色; 定义参加组合对象的共有方法和属性, 可以定义一些默认的行为或属性;
* 2,Leaf叶子构件; 叶子对象, 其下再也没有其他的分支, 也就是遍历的最小单位。
* 3,Composite树枝构件; 树枝对象, 它的作用是组合树枝节点和叶子节点形成一个树形结构。
* 用于树形结构
*/
public class Composite {
public static void main(String[] args) {
//创建一个根节点
Compositez root = new Compositez();
root.common();
//创建一个树枝构件
Compositez branch = new Compositez();
//创建一个叶子节点
Leaf leaf = new Leaf();
//建立整体
root.add(branch);
branch.add(leaf);
display(root);
}
//通过递归遍历树
private static void display(Compositez root) {
for (Component c : root.getChildren()) {
if (c instanceof Leaf) { //叶子节点
c.common();
} else { //树枝节点
display((Compositez) c);
}
}
}
}
abstract class Component {
//个体和整体都具有的共享
public abstract void common();
}
class Compositez extends Component {
//构件容器
private ArrayList<Component> componentArrayList = new ArrayList<Component>();
//增加一个叶子构件或树枝构件
public void add(Component component) {
this.componentArrayList.add(component);
}//删除一个叶子构件或树枝构件
public void remove(Component component) {
this.componentArrayList.remove(component);
}
//获得分支下的所有叶子构件和树枝构件
public ArrayList<Component> getChildren() {
return this.componentArrayList;
}
@Override
public void common() {
System.out.println("branch");
}
}
class Leaf extends Component {
@Override
public void common() {
System.out.println("do something");
}
}