面向对象的设计模式 ——组合模式
组合模式:说白了就是统一接口的树状结构。
好处就是树结构的类无论是枝干还是树叶使用统一的接口,当要对这些类进行操作的时候就可以用同一套代码了。
abstract class Componet{
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(int depth);
}
class Leaf extends Component{
public Leaf(String name){
super.Component(name);
}
public void add(){
System.out.println("不能添加叶子");
}
public void remove(Component c){
System.out.println("不能从叶子中移除");
}
public void display(int depth){
String s = "-";
for(int i = 0;i < depth ; i++){
s = s + "--";
}
System.out.println(s);
}
}
class Composite extend Component{
private List<Component>children = new List<Component>();
public Composite(String name){
super.Composite(name);
}
public void add(Component c){
this.add(c);
}
public void remove(Component c){
this.remove(c);
}
public void display(int depth){
String s = "-";
for(int i = 0;i < depth ; i++){
s = s + "--";
}
System.out.println(s);
foreach (Component c : children){
c.display();
}
}
}
public class Test{
public static void main(String[] args){
Composite root = new Composite("root");
root.add(new Leaf("Leaf A"));
root.add(new Leaf("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"));
root.add(comp2);
root.add(new Leaf("Leaf C"));
Leaf leaf = new Leaf("Leaf D");
root.add(leaf);
root.remove(leaf);
root.display();
}
}