将对象组合成树形结构以表 示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性
- Component 抽象构件角色
定义参加组合对象的共有方法和属性,可以定义一些默认的行为或属性。 - Leaf 叶子构件
叶子对象,其下再也没有其他的分支,也就是遍历的最小单位。 - Composite 树枝构件
树枝对象,它的作用是组合树枝节点和叶子节点形成一个树形结构
从第一步开始构建代码
//抽象构建
public abstract class Component {
public void dosomething(){
}
}
/树枝
public class Composite extends Component {
private ArrayList <Component>compositeList=new LinkedList <>( );
@Override
public void dosomething() {
super.dosomething();
}
//添加一个构建
public void add(Component component){
compositeList.add( component);
}
//删除一个构建
public void remove(Component component){
compositeList.remove( component );
}
//获得分支下的所有叶子构件和树枝构件
public ArrayList <Component> getChildren(){
return this.compositeList;
}
}
public class Leaf extends Component{
@Override
public void dosomething() {
//super.dosomething();
System.out.println("LeafLeaf");
}
}
public class Client {
public static void main(String[] args) {
//创建跟节点
Composite root = new Composite();
root.dosomething();
//创建一个树枝节点
Composite composite = new Composite();
root.add( composite );
//创建树叶
Leaf leaf = new Leaf();
root.add( leaf );
composite.add( leaf );
}
public static void display (Composite root){
for (Component c : root.getChildren()) {
if (c instanceof Leaf) {
//叶子节点 c.doSomething();
} else {
//树枝节点
display( (Composite) c );
}
}
}
}
总结:多个对象组合成一整个类型 最顶层类型依旧是Component
网友评论