版权声明: https://blog.csdn.net/if_i_were_a/article/details/84026128
组合模式:将对象组合成树形结构表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象使用具有一致性
public abstract class Component {
protected String name;
public Component(String name) {
this.name = name;
}
public abstract void add(Component c);
public abstract void remove(Component c);
public abstract void display();
}
public class Leaf extends Component {
public Leaf(String name) {
super(name);
}
@Override
public void add(Component c) {
System.out.println("叶子节点不能在增加分支和树叶了");
}
@Override
public void remove(Component c) {
System.out.println("叶子节点没有可以删除的了");
}
@Override
public void display() {
System.out.println("---"+name);
}
}
public class Composite extends Component {
public Composite(String name) {
super(name);
}
private List<Component> children=new ArrayList<Component>() ;
@Override
public void add(Component c) {
children.add(c);
}
@Override
public void remove(Component c) {
children.remove(c);
}
@Override
public void display() {
System.out.println("-"+name);
for (Component c:children)
{
c.display();
}
}
}
public class Main {
public static void main(String[] args) {
Composite root=new Composite("root");
root.add(new Leaf("A"));
root.add(new Leaf("B"));
Composite comp=new Composite("Composite X");
comp.add(new Leaf("Leaf XA"));
comp.add(new Leaf("Leaf XB"));
root.add(comp);
Composite comp2=new Composite("Composite XY");
comp2.add(new Leaf("Leaf XYA"));
comp2.add(new Leaf("Leaf XYB"));
comp.add(comp2);
root.display();
}
}
何时使用组合模式:
需求中体现部分与整体的结构时,以及希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑使用组合模式了